[[]] * n을 사용한 목록 초기화 시 목록 연결 문제
[[]]를 사용하여 목록 목록을 초기화할 때 n, 프로그래머는 목록이 서로 연결된 것처럼 보이는 예상치 못한 문제에 자주 직면합니다. 이는 [x]n 구문이 고유한 목록 인스턴스를 생성하는 대신 동일한 기본 목록 개체에 대한 여러 참조를 생성하기 때문에 발생합니다.
문제를 설명하려면 다음 코드를 고려하세요.
x = [[]] * 3 x[1].append(0) print(x)
이 코드의 출력은 다음과 같습니다.
[[0], [0], [0]]
예상되는 출력 대신:
[[], [0], []]
이 문제는 목록의 각 요소가 동일한 목록 개체에 대한 참조라는 사실에서 발생합니다. 요소 중 하나가 수정되면 다른 모든 요소가 영향을 받습니다.
완전히 고유한 목록의 목록을 만들려면 올바른 접근 방식은 목록 이해를 사용하는 것입니다.
x = [[] for i in range(3)]
이 구문은 목록의 각 요소에 대해 새 목록 개체를 생성하여 요소가 독립적인지 확인합니다.
다음 코드는 데모 역할을 합니다.
In [20]: x = [[]] * 4
In [21]: [id(i) for i in x]
Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object
In [22]: x=[[] for i in range(4)]
In [23]: [id(i) for i in x]
Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3