2013-10-28 3 views
-2

하나의 목록을 다른 목록에 할당하면 하나의 목록에있는 요소 중 하나를 변경하면 다른 요소가 해당 값으로 자동 할당됩니다.왜 이런 일이 파이썬의 목록에서 발생합니까?

이 동작의 이유는 무엇입니까?

>>> a = [1,2,3] # create a list 
>>> b = a 
>>> b 
[1, 2, 3] 
>>> id(a) 
40307408 
>>> id(b) 
40307408 
>>> a[2] = 5 
>>> b 
[1, 2, 5] 
>>> b[1] = 10 
>>> a 
[1, 10, 5] 

답변

3

개체 ab 참조 (둘 다 객체의 id S를 선택하여 관찰 됨) 같은 객체 때문에. 하나의 값을 변경하면 다른 값도 변경됩니다. ba의 복제본이지만 복제본은 계속됩니다.

이 문제를 방지하려면, 당신은 할 수 있습니다 : ab 사본을 할당

b = a[:] 

.

또는 :

b = list(a) 

또는 : b = a를 호출하여

import copy 
b = copy.copy(a) # The copy module can be useful for nested lists. 
0

, 당신은 실제로 단지 id(a)id(b) 쇼로, 같은 객체를 다른 이름을 지정하고 있습니다. a를 b에 복사하려면 b = a[:] 또는 b = list(a)을 사용해야합니다. 이 경우 a와 b는 별도의 라이프 사이클을 갖습니다. id()를 호출하고 확인하십시오.