为什么 Python for 循环在每次传递中返回最后一个元素?

Why is Python for loop returning last element in each pass?

我的问题标题不太正确,但下面的代码应该足够清楚了。

instances = []
inst = {}
for i in range(4):
    print i
    inst['count'] = i
    instances.append(inst)
print instances

结果

0
1
2
3
[{'count': 3}, {'count': 3}, {'count': 3}, {'count': 3}]

我很期待

[{'count': 0}, {'count': 1}, {'count': 2}, {'count': 3}]

我哪里不明白?

inst 变量的定义放在循环中。

instances = []
for i in range(4):
    inst = {}
    inst['count'] = i
    instances.append(inst)
print(instances)

正如@Mario Ishac 所说,你的字典声明是在 for 循环之前完成的,所以你正在处理同一个字典。将它添加到您的 for 循环中。我已经测试过并且有效。

instances = []
for i in range(4):
    inst = {}
    print(i)
    inst['count'] = i
    instances.append(inst)
print(instances)

所以,这里发生的事情是,此时您尝试更新的字典是一个运行时变量,每次在 for 循环中更新它时,它也会更新其中存在的项目的值这样最终的输出在这个变量存在的地方是相同的。 考虑到列表和字典中的值都不是硬编码值,而是动态的。

它可以通过在每次迭代时创建一个空字典来简单地修复。所以它不会覆盖内存中的相同位置,并且捕获唯一值。

instances = []

for i in range(4):
    inst = {}
    print i
    inst['count'] = i
    instances.append(inst)
print instances