【发布时间】:2021-02-27 06:44:01
【问题描述】:
我有一个字典列表如下:
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 shell 中通过
help(copy)快速访问它
标签: python-3.x list dictionary