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

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

Barbara Streisand
풀어 주다: 2024-12-29 07:50:12
원래의
334명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿