서로 다른 동작: list.__iadd__ 대 list.__add__
다음과 같은 수수께끼의 Python 코드를 고려하세요.
x = y = [1, 2, 3, 4] x += [4] print(x) # [1, 2, 3, 4, 4] print(y) # [1, 2, 3, 4, 4]
이제 다음 코드 조각과 병치해 보세요.
x = y = [1, 2, 3, 4] x = x + [4] print(x) # [1, 2, 3, 4, 4] print(y) # [1, 2, 3, 4]
우리를 당황하게 만드는 것은 그들의 행동의 극명한 차이입니다. x = [4]가 원래 목록 x를 변경하는 반면 x = x [4]가 새 목록을 생성하는 이유는 무엇입니까?
답은 Python의 객체 메서드에 있습니다. list.__iadd__는 두 번째 목록의 요소를 기존 목록에 추가하여 기존 목록을 변경합니다. 반대로 list.__add__는 두 입력 목록의 요소로 구성된 새 목록을 생성합니다.
x = y와 같은 표현식은 먼저 __iadd__를 호출하려고 시도합니다. __iadd__를 사용할 수 있으면 이 돌연변이 마법을 실행합니다. 그렇지 않으면 기본값은 __add__로 설정되어 새 목록을 생성하고 이를 x에 할당합니다. 목록 클래스가 __iadd__를 정의하므로 첫 번째 코드 조각은 원래 x 목록을 변경하는 반면, 후자의 코드 조각은 새 목록을 생성하여 x에 할당하고 y는 수정되지 않은 상태로 둡니다.
위 내용은 `x = [4]`는 `x`를 수정하지만 `x = x [4]`는 Python에서 새 목록을 만드는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!