>  기사  >  백엔드 개발  >  Python Append() 대 목록의 =: 왜 다른 결과를 제공합니까?

Python Append() 대 목록의 =: 왜 다른 결과를 제공합니까?

DDD
DDD원래의
2024-10-27 20:55:30933검색

 Python Append() vs.  = on Lists: Why Do They Give Different Results?

목록의 Python Append() 대 = 연산자: 결과 불일치 이해

Python에서는 add() 메서드와 = 연산자를 사용하여 목록을 수정할 수 있습니다. 그러나 이러한 작업은 특히 중첩 목록을 처리할 때 예상치 못한 결과를 생성하는 경우가 있습니다. 이 글의 목적은 두 접근 방식이 다르게 동작하는 이유를 설명하는 것입니다.

= 연산자

= 연산자는 오른쪽에 있는 목록의 요소를 왼쪽에 목록이 표시됩니다. 원래 목록이 수정되고 업데이트된 목록이 반환됩니다. 예:

<code class="python">c = [1, 2, 3]
c += c  # This is equivalent to c.extend(c)
print(c)  # Output: [1, 2, 3, 1, 2, 3]</code>

이 경우 = 연산자는 c의 요소를 c와 연결하여 원래 크기의 두 배인 목록을 생성합니다.

append() 메소드

append() 메소드는 지정된 객체를 목록의 마지막에 삽입합니다. = 연산자와 달리,append() 메서드는 객체의 요소를 연결하지 않고 오히려 원래 목록에 대한 참조로 추가합니다. 예:

<code class="python">c = [1, 2, 3]
c.append(c)  # This is equivalent to c.insert(len(c), c)
print(c)  # Output: [1, 2, 3, [...]]</code>

이 경우, add() 메소드는 c의 끝에 목록 c에 대한 참조를 추가합니다. 이로 인해 c[-1]과 c가 동일한 개체를 참조하는 순환 참조가 생성됩니다. c를 인쇄하면 [1, 2, 3, [...]]이 출력됩니다. 여기서 [...]는 무한 재귀를 나타냅니다.

왜 차이점이 있나요?

= 연산자와 추가() 메서드의 주요 차이점은 전자는 지정된 개체의 요소에 대해 작동하는 반면 후자는 개체를 전체적으로 처리한다는 것입니다. =를 사용하여 목록을 추가할 때 Python은 요소를 연결하여 각 요소를 새 목록에 효과적으로 복사합니다. 대조적으로, add()를 사용하여 목록을 추가할 때 Python은 단순히 원래 목록에 대한 참조를 추가하므로 목록에 자체에 대한 참조가 포함되어 있으면 무한 재귀가 발생할 수 있습니다.

대안

두 목록을 연결하려는 경우 = 연산자 대신 확장() 메서드를 사용할 수 있습니다. extend() 메소드는 =와 유사하게 작동하지만 원래 목록을 수정하지는 않습니다. 예:

<code class="python">c = [1, 2, 3]
c.extend(c)
print(c)  # Output: [1, 2, 3, 1, 2, 3]</code>

위 내용은 Python Append() 대 목록의 =: 왜 다른 결과를 제공합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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