python-3.x - 字典列表的奇怪行为
问题描述
我有一个字典列表如下:
a = [{'a':1, 'b':2, 'c':3}, {'d':4, 'e':5, 'f':6}]
现在我希望另一个列表b
具有与 a 相同的内容,但(key,value)
多了一对。所以我这样做:
b = a.copy()
for item in b:
item['x'] = 6
但现在这两个名单a
都坐在他们里面b
。'x': 6
>>> b
[{'a': 1, 'b': 2, 'c': 3, 'x': 6}, {'d': 4, 'e': 5, 'f': 6, 'x': 6}]
>>> a
[{'a': 1, 'b': 2, 'c': 3, 'x': 6}, {'d': 4, 'e': 5, 'f': 6, 'x': 6}]
我也试过这个:
c = a[:]
for item in c:
item['q'] = 12
现在所有三个列表都有'q': 12
。
>>> c
[{'a': 1, 'b': 2, 'c': 3, 'x': 6, 'q': 12}, {'d': 4, 'e': 5, 'f': 6, 'x': 6, 'q': 12}]
>>> b
[{'a': 1, 'b': 2, 'c': 3, 'x': 6, 'q': 12}, {'d': 4, 'e': 5, 'f': 6, 'x': 6, 'q': 12}]
>>> a
[{'a': 1, 'b': 2, 'c': 3, 'x': 6, 'q': 12}, {'d': 4, 'e': 5, 'f': 6, 'x': 6, 'q': 12}]
我不明白这是如何工作的。如果我这样做了,这是可以接受的b = a
。但为什么为b = a.copy()
和c = a[:]
。
提前致谢:)
解决方案
要复制字典并复制所有引用的对象,请使用模块中的deepcopy()
函数copy
而不是 dict 的方法copy()
。
import copy
a = [{'a':1, 'b':2, 'c':3}, {'d':4, 'e':5, 'f':6}]
b = copy.deepcopy(d)
推荐阅读
- java - 无法使用 Intellij 表单项目的外部依赖项制作可执行 jar
- python-2.7 - 无法运行 ansible playbook 命令 - 潜在的身份验证错误 (msrest)
- python-3.x - Python对带有字符串键和列表值的字典的理解
- pandas - Pandas 复杂 GroupBy 和应用于机器学习数据集
- angular - ngx-ssrs-reportviwer 抛出 TypeError:无法构造“HTMLElement”:
- postgresql - 创建具有特定格式结果的时间序列 - postgres(已编辑)
- excel - 从 Excel VBA 中的数字中去除连字符
- gitlab - 在没有 https 的情况下注册 GitLab 运行器
- php - Symfony 4 中的数据文件放在哪里?
- xml - 如果 XSL 中包含特定的日期/时间,如何跳过 System.DateTime XML 值?