>  기사  >  백엔드 개발  >  `x = [4]`는 `x`를 수정하지만 `x = x [4]`는 Python에서 새 목록을 만드는 이유는 무엇입니까?

`x = [4]`는 `x`를 수정하지만 `x = x [4]`는 Python에서 새 목록을 만드는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-30 02:09:03823검색

Why Does `x  = [4]` Modify `x` but `x = x   [4]` Create a New List in Python?

서로 다른 동작: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.