2014-01-20 3 views
3

목록의 행렬을 만들고 싶습니다. 그러나 행렬 안에 목록을 만들면 링크 된 목록이 만들어 졌으므로 필요하지 않습니다.목록의 행렬 - Python

A=[[{}]*3]*3 
result: [[{}, {}, {}], [{}, {}, {}], [{}, {}, {}]] 
A[0][2]['h1']=1 
result: [[{'h1': 1}, {'h1': 1}, {'h1': 1}], 
[{'h1': 1}, {'h1': 1}, {'h1': 1}], 
[{'h1': 1}, {'h1': 1}, {'h1': 1}]] 

누구나이를 피할 수 있습니까? 행렬의 각 필드 안에 목록이 필요합니다.

답변

10

A을 동일한 목록에 대한 3 개의 참조로 초기화하고 각 목록은 동일한 사전에 대한 3 개의 참조로 초기화됩니다. 대신, 각 하위 목록 및 사전의 생성자 호출을 명시 적으로 시도 : 보조 노트로

>>> A = [ [{} for _ in range(3) ] for _ in range(3) ] 
>>> A[0][2]['h1']=1 
>>> A 
[[{}, {}, {'h1': 1}], 
[{}, {}, {}], 
[{}, {}, {}] 
] 

"linked list"는 일반적으로 오히려 같은 개체에 대한 여러 참조를 가지고있는 경우보다, 같은 이름의 데이터 구조를 말한다 .