2014-02-15 3 views
1

미안 미안하지만, 기본적인 파이썬 문제인 경우, 어떤 이유로이 사실을 알 수 없습니다.파이썬에서리스트 목록으로 사전 바꾸기

[[{'j': 1}, {'j': 1}, {'j': 1}], 
[{'j': 1}, {'j': 1}, {'j': 1}], 
[{'j': 1}, {'j': 1}, {'j': 1}]] 

가 지금은에 "B"로 변경한다고 가정 :

은 가정하자 나는

b=[[{'j':1}]*3]*3 

그래서 "B는"이라고, 사전의 목록의 목록을 만들

[[{'j': 1}, {'j': 1}, {'j': 1}], 
[{'j': 1}, {'j': 1}, {'j': 90}], 
[{'j': 1}, {'j': 1}, {'j': 1}]] 

그래서 나는 순진하게도이 코드 줄을 사용

b[1][2]['j']=90 

그러나, "B"지금은 이것이다 :

[[{'j': 90}, {'j': 90}, {'j': 90}], 
[{'j': 90}, {'j': 90}, {'j': 90}], 
[{'j': 90}, {'j': 90}, {'j': 90}]] 

왜 목록 변화의 목록에있는 사전의 모든 했습니까? b [1] [2] 항목이 왜 변경되지 않았습니까? 나는 또한 설명 할 수

[[{'j': 1}, {'j': 1}, {'j': 90}], 
[{'j': 1}, {'j': 1}, {'j': 90}], 
[{'j': 1}, {'j': 1}, {'j': 90}]] 

에 또한

, 라인

b=[[{'j':1}]*3]*3 
b[1][2]={'j':90} 

변경 "B"를.

+0

아! 내가 참조! 놀라 울 정도로 빠른 답장을 보내 주셔서 감사합니다. 그것이 내가 필요한 것입니다. – ChickenGod

+2

다음을 읽어보십시오. http://docs.python.org/2/faq/programming.html#how-do-i-create-a-multidimensional-list –

답변

2

사전의 copy() 명령을 사용해야합니다. 그렇지 않으면 동일한 사전에 대한 여러 참조가 만들어집니다. 이 같은

시도 뭔가 :

>>> c = {'j':1} 
>>> b = [c, c.copy(), c.copy()] 
>>> b 
[{'j': 1}, {'j': 1}, {'j': 1}] 
>>> b[2]['j']=2 
>>> b 
[{'j': 1}, {'j': 1}, {'j': 2}] 
관련 문제