>백엔드 개발 >파이썬 튜토리얼 >중첩된 Python 목록에서 하위 목록을 수정하면 모든 하위 목록에 영향을 미치는 이유는 무엇입니까?

중첩된 Python 목록에서 하위 목록을 수정하면 모든 하위 목록에 영향을 미치는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-29 07:50:12358검색

Why Does Modifying a Sublist in a Nested Python List Affect All Sublists?

Python의 중첩 목록 가변성 혼란

소개:

Python에서는 일반적인 문제 중첩된 목록을 처리할 때 발생합니다. 하위 목록에 대한 변경 사항은 예기치 않게 외부 목록의 다른 모든 하위 목록에 영향을 미칩니다. 이 예상치 못한 동작은 목록 생성 및 변경 가능성의 기본 메커니즘에서 비롯됩니다.

문제:

다음 코드를 고려하세요.

xs = [[1] * 4] * 3

이것은 코드는 각 하위 목록에 4개의 1이 포함된 목록 목록을 만듭니다. 그러나 아래와 같이 가장 안쪽 요소 중 하나를 수정하면 모든 하위 목록에 영향을 줍니다.

xs[0][0] = 5

첫 번째 하위 목록의 첫 번째 요소만 변경하는 대신 모든 하위 목록의 첫 번째 요소가 모두 5로 수정됩니다.

이유:

이 행동을 이해하는 열쇠는 다음과 같습니다. Python은 시퀀스를 곱합니다. 기존 목록 [x]에 * 연산자를 사용하면 새 목록이 생성되지 않습니다. 대신 동일한 목록 객체에 대한 여러 참조를 생성합니다.

결과적으로 코드 xs = [[1] * 4] * 3에서 표현식 [1] * 4는 한 번 평가되고 세 번 평가됩니다. 해당 단일 목록에 대한 참조는 외부 목록에 할당됩니다. 이는 모든 하위 목록이 동일한 객체임을 의미합니다.

해결책:

독립적인 하위 목록을 생성하려면 List Comprehension을 사용할 수 있습니다.

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

이 경우 목록 이해는 각 반복에 대해 [1] * 4 표현식을 재평가하여 세 가지 고유한 결과를 얻습니다. 목록.

정수 불변성:

Python의 정수는 불변이므로 값을 변경할 수 없다는 점에 유의하는 것이 중요합니다. 따라서 * 연산자가 동일한 목록에 대한 여러 참조를 생성하더라도 해당 목록 내의 정수 값은 영향을 받지 않습니다.

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

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