python - 将字典附加到 Python 列表 : Strange Result?

标签 python python-3.x

我最近在通过将字典附加到列表来创建字典列表时遇到了一个奇怪的观察结果。

下面是我的代码:

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 中有两件事:

  1. python 中的字典是一个可变对象。在您的代码中,m 是一个字典,即使它已附加到对象 a。之后它的值仍然可以更新。这也会影响附加到 a 的值。
  2. 函数参数在 python 中总是由 Reference 赋值。在代码 a.append(m) 中,您不是将 m 的值传递给 append(),而是传递 m 的引用。因此,当您更新 m 的值时,a 的值也会更新。

我建议你可以进一步研究python中的可变对象和不可变对象(immutable对象)。

关于python - 将字典附加到 Python 列表 : Strange Result?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68204963/

相关文章:

Python argparse 值范围帮助消息外观

python - 递归序列化 python-eve 查询中的所有嵌入资源

python - 如何对具有相同键的行求和?

python - 如何将 Moviepy 大小调整为全屏?

python - 如何让 get_dummies 工作到位?

Python3 shebang 行未按预期工作

python-3.x - 合并两个数据框并进行计算

python - 如何使用参数 Python 执行文件?

python - 使用多处理检测多个子进程的终止

python - 如何将 "game"(PyGame 或 Tk)录制到视频中?