중첩 목록 인덱스
Python에서는 목록 목록을 사용하여 중첩 목록을 만들 수 있습니다. 그러나 이러한 목록 내의 값을 수정하면 Python의 참조 처리로 인해 일반적인 함정이 발생합니다.
다음 코드를 고려하세요.
<code class="python">some_list = 4 * [(4 * [0])] for i in range(3): for j in range(3): some_list[i + 1][j + 1] = 1 for i in range(4): print(some_list[i])</code>
의도된 출력은 다음과 같습니다.
[0, 0, 0, 0] [0, 1, 1, 1] [0, 1, 1, 1] [0, 1, 1, 1]
그러나 실제 출력은 다음과 같습니다.
[0, 1, 1, 1] [0, 1, 1, 1] [0, 1, 1, 1] [0, 1, 1, 1]
문제 이해
문제는 some_list = 4 * [(4 * [0) 줄에서 비롯됩니다. ])]. 여기서 [(4 * [0])] 표현식은 4개의 요소가 있는 단일 목록을 생성하며, 각 요소는 4개의 0이 있는 목록입니다. 그러나 후속 곱셈 4 *는 4개의 개별 목록이 아닌 동일한 목록에 대한 4개의 참조를 생성합니다.
결과적으로 some_list의 한 요소 내에서 값이 수정되면 다른 요소에도 영향을 미칩니다. 모두 동일한 기본 목록을 가리킵니다. 이 동작을 Python에서는 참조 전달이라고 합니다.
해결책
이 문제를 해결하고 some_list 내에 독립적인 목록을 생성하려면 루프를 사용하여 각 하위 목록을 개별적으로 생성할 수 있습니다. , 다음과 같습니다.
<code class="python">some_list = [(4 * [0]) for _ in range(4)]</code>
이 코드는 각각 4개의 0이 있는 4개의 개별 목록을 생성합니다. 한 하위 목록 내의 값을 수정해도 더 이상 다른 하위 목록에 영향을 미치지 않습니다.
위 내용은 Python의 중첩 목록이 동일한 기본 데이터를 공유하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!