2013-01-09 3 views
0

Python 2.7 스크립트를 사용하여 동료를 돕는 동안 이상한 것으로 나타났습니다. 그는 사전 값으로리스트가있는 사전을 가지고있다. 그는 사전 값을 새 변수에 할당 한 다음 목록을 편집하는 중이었습니다. 이상한 부분은 새로운 변수의 목록 변경도 사전에 반영되고 있다는 것입니다. 나는 쉘에서 간단한 예제를 반복했고 아래에 게시했다. 나도 같은 것을 시도했지만 사전 값으로 문자열을 사용했지만 효과가 없었다. 내가 여기에 빠져 있거나 뭔가 일종의 버그가 있습니까? 감사. I 위의 예에서 Python - 사전에서 목록 할당 및 변경

>>> dict1 = {} 
>>> dict1['foo'] = [1,2,3] 
>>> print dict1  
{'foo': [1, 2, 3]}  
>>> bar = dict1['foo'] 
>>> bar.append(4) 
>>> print dict1  
{'foo': [1, 2, 3, 4]} 

는 4 에 추가하고 '갑'의 값은 [1,2,3] 남아 예상 것이다.

답변

3

목록의 사본이 없으면 목록 자체에 대한 참조가 표시됩니다. 목록이 변경 가능하기 때문에 동작은 전적으로 예상됩니다.

>>> c = list(a) 
>>> c.append(5) 
>>> c 
[1, 2, 3, 4, 5] 
>>> a 
[1, 2, 3, 4] 

사본을 작성하는 또 다른 방법 : 대신 독립적 인 목록을 가지고 싶었다면

>>> a = [1, 2, 3] 
>>> b = a 
>>> b.append(4) 
>>> a 
[1, 2, 3, 4] 

는 복사본을 만들 :

는 목록에 두 번째 변수 포인팅을 사용하여이 비교 전체 목록 슬라이스를 사용하는 것입니다 :

>>> c = a[:] 
+0

고마워요! 나는 방금 후드 아래에서 작동하는 방법을 설명하는 페이지를 찾았습니다. 이제는 좋은 키워드를 사용했습니다. 나는 그것의 방금 전에 내가 데리러 보지 못한 미묘한 추측이라고 생각한다. – feik