尝试复制一个字典,其值为集合,但不起作用。
尝试复制一个字典,其值为集合,但不起作用。
这个问题已有答案:
我试图复制一个字典,该字典的值是一个集合。
dic = {0: set([1]), 1: set([0, 2]), 2: set([1, 3]), 3: set([2, 4]), 4: set([3])} dic1 = dic.copy() dic1[0].update(dic[1]) print dic print dic1
但我得到了
{0: set([0, 1, 2]), 1: set([0, 2]), 2: set([1, 3]), 3: set([2, 4]), 4: set([3])} {0: set([0, 1, 2]), 1: set([0, 2]), 2: set([1, 3]), 3: set([2, 4]), 4: set([3])}
所以基本上它们现在是同一个东西。我尝试过使用字典推导式和.copy(),但都不行!我该如何使原始字典保持不变?
我在Python tutor上看到,键是在dic1中,但值和dic中的值链接在一起。如何使它们拥有独立的值呢?
admin 更改状态以发布 2023年5月21日
你可以使用copy.deepcopy
来完成,像这样:
import copy dic1 = copy.deepcopy(dic)
通常情况下,当你复制一个字典对象时,对于每个键值对,都会创建一个新的键引用(字典无法允许不可变对象作为键),并且还会创建一个新的值对象引用。新的引用将引用同一个原始对象。更新一个集合实际上是对该对象进行改变。因此,新的引用和原始对象将反映这些变化。
进行深拷贝时,它实际上会创建值对象的新副本(不是新的引用),即使它是可变对象。这个操作是递归进行的。