sil*_*gon 3 python list matrix python-2.7 python-3.x
我想创建一个列表矩阵,但是当我在矩阵中创建列表时,它创建了一个链表,我不需要它.
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}]]
Run Code Online (Sandbox Code Playgroud)
谁知道如何避免这种情况?我需要在矩阵的每个字段内有一个列表.
mdm*_*dml 10
您正在A使用对同一列表的3个引用进行初始化,并且每个列表都使用对同一字典的3个引用进行初始化.相反,尝试显式调用每个子列表和字典的构造函数:
>>> A = [ [{} for _ in range(3) ] for _ in range(3) ]
>>> A[0][2]['h1']=1
>>> A
[[{}, {}, {'h1': 1}],
[{}, {}, {}],
[{}, {}, {}]
]
Run Code Online (Sandbox Code Playgroud)
作为旁注,"链表"通常是指同名的数据结构,而不是您对同一对象有多个引用的情况.