2014-11-05 71 views
0

我想复制设置为值的字典。试图复制字典与设置为值不起作用

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()而没有!我怎样才能使原始字典保持不变?

我去了蟒蛇导师,基本上,键在dic1但价值链接到在dic的。我怎样才能让它们具有独立的价值?

回答

1

你可以做copy.deepcopy,这样

import copy 
dic1 = copy.deepcopy(dic) 

通常,当你复制一个字典对象,为每一个键值对,一个新的参考键时(词典不允许一成不变对象作为键)并且还创建了对值对象的新引用。新的参考也会引用相同的原始对象。更新一套实际上是变异的对象。所以,新的参考和原始对象将反映这些变化。

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