很抱歉,如果这是一个基本的Python问题,但出于某种原因,我无法理解这一点。
假设我创建了一个字典列表列表,
b=[[{'j':1}]*3]*3
这样“b”就是这样:
[[{'j': 1}, {'j': 1}, {'j': 1}],
[{'j': 1}, {'j': 1}, {'j': 1}],
[{'j': 1}, {'j': 1}, {'j': 1}]]
现在假设我想将“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]条目改变了?
另外,行
b=[[{'j':1}]*3]*3
b[1][2]={'j':90}
将“b”更改为
[[{'j': 1}, {'j': 1}, {'j': 90}],
[{'j': 1}, {'j': 1}, {'j': 90}],
[{'j': 1}, {'j': 1}, {'j': 90}]]
我也无法解释。
答案 0 :(得分: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}]