python - 为什么?- 从循环构造字典列表不起作用,除非在每次迭代时重新创建字典
问题描述
我真的很难过,从循环创建字典列表不会产生预期的结果,除非在每次迭代时重新创建字典。
以下示例是人为设计的,仅用作最小的重复。
有两件事按预期工作:
l = list()
for i in range(1, 4):
d = dict() # dict recreated on every iteration
d['index'] = i
l.append(d)
print(l)
print([{'index': i} for i in range(1, 4)])
他们都打印:
[{'index': 1}, {'index': 2}, {'index': 3}]
没有按预期工作的事情:
d = dict() # dict created once only
l = list()
for i in range(1, 4):
d['index'] = i
l.append(d)
print(l)
产生:
[{'index': 3}, {'index': 3}, {'index': 3}]
我本来希望index
在每次传递时都会简单地覆盖所引用的现有字典的值,然后将其添加到列表中,并且我会得到一点性能改进(实际上字典要大得多)。
它几乎看起来好像l.append
只是添加了引用而不是传递值。
我错过了一些令人尴尬的显而易见的事情吗?
解决方案
“看起来好像l.append
只是添加了引用而不是传递值。”:就是这样;你没有错过任何东西。
推荐阅读
- regex - 如何为具有相同分隔符的 10 位电话号码创建正则表达式?
- scala - Spark / Scala中数据框多列的数组元素总和?
- c# - 在用户控件中填充 ComboBox
- jwt - jose4j,用对称密钥解密 JWE
- java - QueryDSL 中具有多个连接的动态 SQL 投影
- openstack - 更改 max_routes
- php - 如何在 nodejs udp 服务器中设置 api 路由?
- javascript - 在选择提示中修改选择验证 - Bot Framework Node.js
- google-cloud-firestore - 如何在 Firestore 安全规则中为数组中的每个项目创建规则
- python - 最近对 python 的更新现在为导入函数代码提供了错误消息 - 它们仍然有效并且模块中没有错误,