python - 为什么更新附加到列表的字典会更改列表?

标签 python arrays dictionary

我认为我的代码会更清晰-

someList = list()
foo = {'a':'b'}
someList.append(foo)
print someList
>>> [{'a':'b'}]
defaultbazz = {'a':2, 'b':'t', 'c':'gg'}

for k, v in defaultbazz.iteritems():
    foo[k] = v

print someList
>>> [{'a': 2, 'c': 'gg', 'b': 't'}]

最后打印的不应该是[{'a':'b'}]吗?我没有更新 someList,我想要它原样..

在我看来这是未解释的行为..

但如果这就是 python 的工作方式,我该如何找到解决方法?即使设置一个新的字典也会更新原来的一个字典。我的意思是:

someList = list()
foo = {'a':'b'}
someList.append(foo)
print someList
>>> [{'a':'b'}]
bar = foo
defaultbazz = {'a':2, 'b':'t', 'c':'gg'}

for k, v in defaultbazz.iteritems():
    bar[k] = v

print someList
>>> [{'a': 2, 'c': 'gg', 'b': 't'}]

如果有人可以向我解释为什么会这样,我将不胜感激..

最佳答案

当您将 dict 添加到列表或将其分配给新变量时,您似乎希望它被复制,但这不是 Python 的操作方式。如果您分配一个字典——实际上,如果您分配任何对象——您并不是在创建一个新对象,而是您只是给您的对象一个新名称。 (一个对象可以有多个名称。)

因此,当您使用新名称编辑对象时,该对象的单个实例会发生变化,并且当您通过任何名称访问该对象时,该变化都是可见的。

如果你想复制你的对象,那么你可以这样做:

bar = dict(foo)

bar = foo.copy()

关于python - 为什么更新附加到列表的字典会更改列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11600824/

相关文章:

python - Python 和 c++ 之间的二维数组初始化。这是什么 ?为什么?

javascript - 通过子数组处理数组

C++ map.erase() 导致不必要的平衡

c - '\0' evaluates false, "\0"评估为真

Python:从字典中具有最大值的键列表中随机选择

dictionary - 如何解决Golang map 的并发访问?

python - Django 导入 Excel 端点

python - 无法 pip 安装 Tensorflow 'msvcp140_1.dll' 缺失

python - 简短的 Python 代码说 "Pick the lower value"?

python - Pandas:如何使用plotly作为后端根据日期绘制多条线?