2016-06-24 8 views
1

아무도 왜 이런 일이 일어 났는지 설명 할 수 있습니까?파이썬 배열 이상한 행동?

사례 1 :

>>> a = [[0]] *3 
>>> print a 
[[0], [0], [0]] 
>>> a[1].append(0) 
>>> print a 
[[0, 0], [0, 0], [0, 0]] 

사례 2 : 왜이 ​​

>>> a = [[0],[0],[0]] 
>>> print a 
[[0], [0], [0]] 
>>> a[1].append(0) 
>>> print a 
[[0], [0, 0], [0]] 

일이야? 나는 사건 1에서 배열의 행동이 사건 2에서와 같을 것이라고 기대하지만 어떤 이유로는 아니다.

+0

얕은 복사 : 당신은 변경 가능한 유형이 때 지능형리스트를 사용하여이 문제를 방지하려면 유일한 불변의 유형

와 스타 양식을 사용해야합니까? – Arpan

+4

이것들은 배열이 아니라 파이썬'list's입니다. 파이썬의 맥락에서,'array'는 보통 NumPy 배열을 의미하는 것으로 해석됩니다 (표준 라이브러리'array' 모듈도 있음). –

답변

2

을, 당신은 목록 [0]를 만들고 여기에 3 번 중복된다. 이것은 동일한 목적을 세 번 반복 한 것입니다. 첫 번째 경우에

a = [[0] for _ in range(3)] 
3

첫 번째 경우 a의 세 요소는 실제로 동일한 목록 개체를 참조합니다. 당신은 자신의 ID를 확인할 수 있습니다 : 첫 번째 경우

>>> id(a[0]) 
4524132472 
>>> id(a[1]) 
4524132472 
>>> id(a[2]) 
4524132472 
+0

또는'(a [0]은 a [1]) == True' –