将字典附加到列表中 \- 我看到了类似行为的指针

新手上路,请多包涵

我在 python 解释器中尝试了以下内容:

 >>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]

Here, after appending the dictionary b to the list a , I’m changing the value corresponding to the key 1 in dictionary b .这种变化也以某种方式反映在列表中。当我将字典附加到列表时,我不只是附加字典的值吗?看起来好像我已将指向字典的指针附加到列表中,因此对字典的更改也反映在列表中。

我不希望更改反映在列表中。我该怎么做?

原文由 neo29 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 287
2 个回答

您是正确的,因为您的列表包含对原始词典的 _引用_。

a.append(b.copy()) 应该可以解决问题。

请记住,这是一个浅拷贝。另一种方法是使用 copy.deepcopy(b) ,它会进行深度复制。

原文由 NPE 发布,翻译遵循 CC BY-SA 2.5 许可协议

也有 字典

a = []
b = {1:'one'}

a.append(dict(b))
print a
b[1]='iuqsdgf'
print a

结果

[{1: 'one'}]
[{1: 'one'}]

原文由 eyquem 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题