2014-01-20 237 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"一般是指名稱相同的數據結構,而不是在那裏你必須在同一對象的多個引用的情況下。