Python 尝试复制集为值的字典不起作用

Python 尝试复制集为值的字典不起作用,python,dictionary,copy,set,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:

我正试图复制一个以集合为值的字典

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中的值相链接。我怎样才能使它们有独立的值呢?

你可以这样做,就像这样

import copy
dic1 = copy.deepcopy(dic)
通常,当您复制dictionary对象时,对于每个键-值对,都会对键进行新的引用(dictionary不允许不可变的对象作为键),并且还会对值对象进行新的引用。新引用也将引用相同的原始对象。更新集合实际上是改变对象。因此,新参照和原始对象将反映更改

当一个deepcopy完成时,它实际上创建了value对象的一个新副本(不是一个新引用),即使它是一个可变对象。此复制是递归完成的