python - 为具有相同键的字典设置值时,python 字典列表的意外行为
问题描述
Python 3.7.2 中的这种行为(没有检查其他版本)让我感到惊讶。目标是拥有一个具有相同键的字典列表,并能够操作单个值。使用列表索引和字典键,预期的行为是我应该能够设置特定字典的键的值。
这是一个示例代码:
lst = []
lst.append({"A" : 0, "B" : 0 })
lst.append({"A" : 0, "B" : 0 })
lst[1]["B"] = 11
print(lst)
lst2 = [{"A" : 0, "B" : 0 }]*2
lst2[1]["B"] = 11
print(lst2)
结果如下:
[{'A': 0, 'B': 0}, {'A': 0, 'B': 11}]
[{'A': 0, 'B': 11}, {'A': 0, 'B': 11}]
第二个结果让我感到惊讶,为什么它将两个字典的键“B”的值设置为 11?为什么初始化 aslst
和lst1
.
解决方案
如果您复制字典 - 无论是按照您所做的方式,还是a = b = {'someKey': 'someValue'}
,您只复制引用,而不是对象本身。通过引用更改对象将反映同一对象的其他引用中的更改。
推荐阅读
- javascript - 多个承诺的障碍/等待多个 setTimeout 调用
- mysql - 可以用 mysql 触发器或 cronjob 代替 mysql 事件吗?
- python - 引用显示“声明前引用的局部变量‘final_ans’的变量”
- c# - 使用 Firestorage 上传系统的问题
- python-3.x - 从 crontab 调用时 Python 脚本崩溃
- c# - C# SQL 从组合框中选择
- javascript - 如何使用 JavaScript 通过新的 Google Ads API 获取基本数据
- javascript - 从另一个方法调用对象的方法
- r - R:在所有可能的变量组合之间执行 Cohen 的 Kappa 检验
- python - 以python方式整理列表推导