[Value] * Count
목록을 초기화하기 위해 Python 에서 표기법을 사용했습니다 . 예를 들어, [False] * 3
목록이 생성됩니다 [False, False False]
. 목록 목록을 초기화하는 데 동일한 표기법을 사용해 보았습니다.
>>>a = [[0] * 2] * 3
>>>print a
[[0, 0], [0, 0], [0, 0]]
>>>a[0][1] = 23
>>>print a
[[0, 23], [0, 23], [0, 23]]
>>>id(a[0])
139978350226680
>>>id(a[1])
139978350226680
>>>id(a[2])
139978350226680
보시다시피,의 요소는 세 개의 다른 목록을 참조하는 대신 단일 목록을 세 번 참조합니다. 1. 왜 이런 일이 발생합니까? 2. 목록 목록을 초기화하는 올바른 방법은 무엇입니까?
이전 답변에서 동일한 동작이 지적되었습니다. https://stackoverflow.com/a/13382804/4716199
즉,의 행동이다 *
는 않습니다 목록에 운영자 복사본을 만들지 만, 복사 참조 . 일반적으로 복사 방법을 정의하지 않았기 때문에 파이썬은 모든 객체가 가지고있는 유일한 것이기 때문에 참조 만 복사 할 수 있습니다.
새 목록을 구성하려는 경우 목록 이해력을 사용할 수 있습니다.
a = [[0] * 2 for _ in range(3)]
일반적으로 목록 에 변경 가능한 객체가 포함되어 있으면 사용하는 것은 좋지 않습니다 .*
변경 불가능한 객체의 경우 bool
및 str
이것은 객체 자체 에서 작업하지 않고 결과 배열에서 작업하기 때문에 작동합니다 . 이 예에서는 체인 인덱싱을 사용 했으므로 내부 목록을 수정합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다