2013-02-10 143 views
1

在Python的不同副本组成的字典,有两个字典,简单地做创建另一个字典

dict2 = dict1 

不会造成dict2是dict1的不同副本。他们会指向相同的东西,所以修改dict2将对dict1执行相同的效果。

一个解决办法是

dict2 = dict(dict1) 

所以如果我修改dict2,它不会影响dict1的价值观。

在我的程序中,我正在制作一个字典,它是由以前的字典的多个副本组成的。我们称之前的词典temp2和当前的temp3。我不知道有多少张,我需要提前,所以我想这样做的:

temp3 = {} 
for i in xrange(some_number): 
    temp3[i] = dict(temp2) 

但我的调试测试表明,如果我修改TEMP3 [0]的字典(再次,是temp2的副本),那么这也将修改temp3 [1]的副本和temp3 [2]等,所以结果是由n个相同副本的字典组成的字典,其中n = some_number。有谁知道解决方法?谢谢。

编辑:作为对评论的回应,temp2是由值列表构成的词典,所以{a:[list1],b:[list2]等}。

+1

不,你制作的复制品,所以我觉得你的分析是不正确。 * temp2中包含了什么?字典中是否包含其他可变值(嵌套字典或列表等)? – 2013-02-10 21:15:21

+0

我第一次从另一个字典中制作temp2,所以它的形式是temp2 = dict(temp1)。 temp2确实由嵌套列表组成。 temp2 = {a:[list1],b:[list2]等。}。我应该补充说,原来的职位... – TakeS 2013-02-10 21:19:21

回答

3

尝试copy.deepcopy方法:http://docs.python.org/2/library/copy.html

+0

是的,那工作。嘿,我觉得自己像一个白痴... – TakeS 2013-02-10 21:25:14

+0

我并不知道'deepcopy()'实际上是那么深。在我对问题的再现中,我意外地设置了错误的列表项目,从而产生了错误的印象。删除了我的答案。 – 2013-02-11 02:00:33