尝试复制带有集合的字典作为值不起作用

时间:2014-11-05 04:46:43

标签: python dictionary copy set

我正在尝试复制已设置为值的字典。

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导师,基本上,键在dic1中,但是值与dic中的值相关联。我怎样才能使它们具有独立的价值?

1 个答案:

答案 0 :(得分:1)

你可以像{<3}}那样做

import copy
dic1 = copy.deepcopy(dic)

通常,当您复制字典对象时,对于每个键值对,都会对键进行新的引用(字典不允许将不可变对象作为键),并且还会对值对象进行新的引用。新引用也将引用相同的原始对象。更新集合实际上是在改变对象。因此,新引用和原始对象将反映更改。

完成深度复制后,它实际上会创建值对象的新副本(而不是新引用),即使它是一个可变对象。这个副本是递归完成的。