>  기사  >  백엔드 개발  >  `list.__iadd__`는 원래 목록과 할당된 목록을 모두 수정하는 반면 `list.__add__`는 할당된 목록만 수정하는 이유는 무엇입니까?

`list.__iadd__`는 원래 목록과 할당된 목록을 모두 수정하는 반면 `list.__add__`는 할당된 목록만 수정하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-30 17:05:25532검색

Why does `list.__iadd__` modify both original and assigned lists, while `list.__add__` only modifies the assigned list?

list.__iadd__과 list.__add__ 간의 동작 불일치

다음 스니펫을 고려하세요.

<code class="python">x = y = [1, 2, 3, 4]
x += [4]
print(x)  # Outputs: [1, 2, 3, 4, 4]
print(y)  # Outputs: [1, 2, 3, 4, 4]</code>

반대로 , 다음 사항을 확인하세요.

<code class="python">x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # Outputs: [1, 2, 3, 4, 4]
print(y)  # Outputs: [1, 2, 3, 4]</code>

이 두 코드 조각이 다르게 동작하는 이유는 무엇입니까?

설명

주요 차이점은 " " 연산자. 첫 번째 코드 조각에서:

  • x = [4]는 목록 클래스의 __iadd__ 메서드를 사용합니다. 이 메서드는 다음과 같습니다.

    • 에서 원본 목록(x)을 변경합니다. -place
    • 두 번째 목록([4])의 요소로 확장합니다.

이렇게 하면 x와 y가 모두 값을 포함하도록 수정됩니다. 4.

그러나 두 번째 스니펫에서 x = x [4]는 __add__ 메서드를 사용합니다.

  • x [4]는 x를 [4]와 연결하여 새 목록을 생성합니다.
  • 그런 다음 x 변수가 이 새 목록에 다시 할당됩니다
  • y는 다른 객체이므로 변경되지 않은 상태로 유지됩니다

따라서 x의 값은 [1, 2 , 3, 4, 4] y는 여전히 원래 값 [1, 2, 3, 4]을 유지합니다.

위 내용은 `list.__iadd__`는 원래 목록과 할당된 목록을 모두 수정하는 반면 `list.__add__`는 할당된 목록만 수정하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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