2014-01-20 195 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"一般是指名称相同的数据结构,而不是在那里你必须在同一对象的多个引用的情况下。