首页 > 解决方案 > 字典列表的奇怪行为

问题描述

我有一个字典列表如下:

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[:]

提前致谢:)

标签: python-3.xlistdictionary

解决方案


要复制字典并复制所有引用的对象,请使用模块中的deepcopy()函数copy而不是 dict 的方法copy()

import copy
a = [{'a':1, 'b':2, 'c':3}, {'d':4, 'e':5, 'f':6}]
b = copy.deepcopy(d)

推荐阅读