如果更新了字典之一,Python 连接的字典列表会修改列表中的所有字典实例

时间:2021-01-27 11:02:41

标签: python list dictionary concatenation

我有一个简单的场景,其中 Python(3.7,也测试了 3.5)似乎不像我预期的那样表现。 简单来说:

a = [{"c":1, "d":2}]
a
[{'c': 1, 'd': 2}]
b = a + a
b
[{'c': 1, 'd': 2}, {'c': 1, 'd': 2}]
b[0]
{'c': 1, 'd': 2}
b[0]['c'] = 3
b
[{'c': 3, 'd': 2}, {'c': 3, 'd': 2}]

更改 b 中第一个字典中条目的值,也会更新第二个字典中的相应条目。 我试过 b = a.copy() + a.copy() 但得到了相同的结果。 有人知道解决方法吗?

1 个答案:

答案 0 :(得分:0)

您应该使用 deepcopy

copy 只返回一个浅表副本,因此由于您的字典在列表中,因此副本将创建新列表,但列表中的字典仍将引用相同的字典。

如果你有这种情况,浅拷贝会起作用:

a = {"c":1, "d":2}
b = [a.copy(), a.copy()] 

但在您的情况下,您需要使用 deepcopy

from copy import deepcopy

b = deepcopy(a) + deepcopy(a)