> 백엔드 개발 > 파이썬 튜토리얼 > Python의 = 연산자는 __iadd__ 및 __add__에 따라 목록에 어떻게 차별적으로 영향을 줍니까?

Python의 = 연산자는 __iadd__ 및 __add__에 따라 목록에 어떻게 차별적으로 영향을 줍니까?

Susan Sarandon
풀어 주다: 2024-12-22 04:36:13
원래의
372명이 탐색했습니다.

How Does Python's  = Operator Differentially Affect Lists Depending on __iadd__ and __add__?

Python의 목록에서 = 연산자가 작동하는 방식

Python의 = 연산자를 목록에 적용하면 예기치 않은 동작이 나타납니다. 이 동작은 iaddadd 특수 메서드

iadd 간의 차이로 인해 발생합니다. 추가

  • __iadd__': 내부 추가; 작업 중인 개체를 변경합니다.
  • __add__': 새 개체를 반환합니다. 표준 연산자에 사용됩니다.

목록에서의 동작

iadd 메소드를 사용하여 목록에 =를 사용하면 목록은 그 자리에서 수정됩니다. iadd가 정의되지 않은 경우 add가 호출되어 새 목록이 생성됩니다.

다음을 고려하세요. 코드:

class foo:
    bar = []
    def __init__(self, x):
        self.bar += [x]

class foo2:
    bar = []
    def __init__(self, x):
        self.bar = self.bar + [x]

f = foo(1)
g = foo(2)
print(f.bar)
print(g.bar)

f.bar += [3]
print(f.bar)
print(g.bar)

f.bar = f.bar + [4]
print(f.bar)
print(g.bar)

f = foo2(1)
g = foo2(2)
print(f.bar)
print(g.bar)
로그인 후 복사

출력

[1, 2]
[1, 2]
[1, 2, 3]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3]
[1]
[2]
로그인 후 복사

설명

  • foo는 __iadd__를 구현하므로 = 수정합니다. f.bar, 모든 인스턴스에 영향을 미치게 됩니다. foo.
  • foo2에는 __iadd__가 없으므로 =는 __add__를 트리거하여 f.bar를 대체하는 새 목록을 반환합니다.
  • foo2는 원래 막대 목록을 유지하고 foo는 이를 수정합니다.

결론

목록에서 =의 동작은 iadd 또는 add__를 호출하는지 여부에 따라 달라집니다. 내부 수정은 __iadd__를 사용하여 발생하며 __add는 새 목록을 생성합니다.

위 내용은 Python의 = 연산자는 __iadd__ 및 __add__에 따라 목록에 어떻게 차별적으로 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿