【问题标题】:Creating a dictionary composed of distinct copies of another dictionary创建由另一个字典的不同副本组成的字典
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 我不知道deepcopy() 真的有那么深。在我重现问题的过程中,我只是因为不小心设置了错误的列表项而产生了错误的印象。删除了我的答案。
猜你喜欢
  • 2012-07-14
  • 2023-01-11
  • 1970-01-01
  • 2022-10-05
  • 2021-03-09
  • 2021-06-28
  • 1970-01-01
  • 2014-06-17
  • 2021-05-15
相关资源
最近更新 更多