我认为我的代码会更清晰-
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/