【发布时间】:2013-02-10 21:12:35
【问题描述】:
在 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], etc.}。
【问题讨论】:
-
不,你复制了,所以我认为你的分析是不正确的。 在
temp2中包含什么?字典中是否包含其他可变值(嵌套字典或列表等)? -
我首先从另一个字典中制作了 temp2,所以它的形式是 temp2 = dict(temp1)。 temp2 确实由嵌套列表组成。 temp2 = {a: [list1], b: [list2] 等..}。我可能应该将其添加到原始帖子中...
标签: python dictionary