我最近在通过将字典附加到列表来创建字典列表时遇到了一个奇怪的观察结果。
下面是我的代码:
a = []
for i in range(5):
m = {'a':'apple'}
a.append(m)
m['b'] = 'ball'
for i in a:
print(i)
我预计列表 a
将只包含 'a': 'apple'
因为键 b
是在 append 语句之后定义的.
令人惊讶的是,下面是我获得的输出:
{'a': 'apple', 'b': 'ball'}
{'a': 'apple', 'b': 'ball'}
{'a': 'apple', 'b': 'ball'}
{'a': 'apple', 'b': 'ball'}
{'a': 'apple', 'b': 'ball'}
为什么会这样?提前致谢!
最佳答案
那是因为 python 中有两件事:
- python 中的字典是一个可变对象。在您的代码中,
m
是一个字典,即使它已附加到对象a
。之后它的值仍然可以更新。这也会影响附加到a
的值。 - 函数参数在 python 中总是由 Reference 赋值。在代码
a.append(m)
中,您不是将 m 的值传递给append()
,而是传递 m 的引用。因此,当您更新 m 的值时,a 的值也会更新。
我建议你可以进一步研究python中的可变对象和不可变对象(immutable对象)。
关于python - 将字典附加到 Python 列表 : Strange Result?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68204963/