> 백엔드 개발 > 파이썬 튜토리얼 > Python의 중첩 목록이 동일한 기본 데이터를 공유하는 이유는 무엇입니까?

Python의 중첩 목록이 동일한 기본 데이터를 공유하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-10-31 07:46:02
원래의
305명이 탐색했습니다.

Why Do Nested Lists in Python Share the Same Underlying Data?

중첩 목록 인덱스

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

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