>백엔드 개발 >파이썬 튜토리얼 >Python에서 목록 곱셈을 사용할 때 하나의 하위 목록을 수정하면 모든 하위 목록에 영향을 미치는 이유는 무엇입니까?

Python에서 목록 곱셈을 사용할 때 하나의 하위 목록을 수정하면 모든 하위 목록에 영향을 미치는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-22 08:24:101002검색

Why Does Modifying One Sublist Affect All Sublists When Using List Multiplication in Python?

목록 변경 사항이 하위 목록 전체에 예기치 않게 반영됨

Python에서 [[1] 4]와 같이 목록 곱셈을 사용하여 목록 목록 생성 3, 하나의 하위 목록에 대한 변경 사항이 모든 하위 목록에 영향을 미치는 상황이 발생합니다. 이 동작은 직관에 어긋나며 예상치 못한 결과를 초래할 수 있습니다.

설명

목록 곱셈을 사용할 때 새 목록은 원래 목록에 대한 참조입니다. 새 목록의 요소를 수정하면 실제로 모든 하위 목록에서 참조하는 원래 목록의 요소가 수정됩니다.

이 예기치 않은 동작은 Python이 목록 이해 전에 곱셈 연산자 를 평가하기 때문에 발생합니다. . 이 경우 [[1] 4]는 단일 하위 목록으로 평가되고 *는 해당 하위 목록에 대한 세 개의 참조를 생성합니다.

해결책

이 동작을 방지하고 세 개의 독립적인 참조를 생성하려면 하위 목록의 경우 다음과 같이 목록 이해를 사용할 수 있습니다.

[[1] * 4 for _ in range(3)]

목록 이해는 재평가합니다. 각 하위 목록에 대한 [1] * 4 표현식으로 인해 연결되지 않은 세 개의 개별 하위 목록이 생성됩니다.

목록 곱셈과의 비교

목록 곱셈은 반복되는 요소가 있는 목록을 만드는 편리한 방법입니다. , 한계를 이해하는 것이 중요합니다. 목록 곱셈은 표현식을 보지 않고 기존 객체에 대해 작동합니다. 객체의 복사본을 만들지 않고 대신 기존 객체에 대한 참조를 생성합니다.

반대로 리스트 컴프리헨션은 각 요소에 대한 표현식을 재평가하여 필요에 따라 새 객체를 생성합니다. 이 동작은 목록의 각 요소가 독립적임을 보장합니다.

추가 리소스

  • [목록이 이후에 예기치 않게 변경되지 않도록 목록을 복제하려면 어떻게 해야 합니까? 과제?](https://stackoverflow.com/questions/19850422/how-do-i-clone-a-list-so-that-it-doesnt-change-unexpectedly-after-location)
  • [2차원 배열(NumPy를 사용하지 않는 경우 목록의 목록)을 초기화하는 방법 Python?](https://stackoverflow.com/questions/6951326/how-to-initialize-a-two-Dimensional-array-list-of-lists-if-not-using-numpy-in-pyt)
  • [사전 목록은 매 마다 마지막으로 추가된 값만 저장합니다. 반복](https://stackoverflow.com/questions/10827325/list-of-dictionary-stores-only-last-appended-value-in-every-iteration)

위 내용은 Python에서 목록 곱셈을 사용할 때 하나의 하위 목록을 수정하면 모든 하위 목록에 영향을 미치는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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