【发布时间】:2020-11-14 02:24:44
【问题描述】:
您能否帮助我理解为什么deepcopy 不适用于以下示例中字典中的所有元素?
import copy
a = [{'id':1, 'list':[1,2,3], 'num':3}, {'id':2,' list':[4,5,6], 'num':65}]
b = {i['id']:copy.deepcopy(i) for i in a}
In [1]: print(id(a) == id(b))
Out[1]: False
In [2]: print(id(a[0]) == id(b[1]))
Out[2]: False
In [3]: print(id(a[0]['list']) == id(b[1]['list']))
Out[3]: False
In [4]: print(id(a[0]['num']) == id(b[1]['num']))
Out[4]: True
特别是,与'num' 键关联的值是相同的,而'list' 键的值似乎已与deepcopy 成功复制。我猜这与所存储值的数据类型有关,有人可以指点我正确的方向吗?
谢谢!
【问题讨论】:
-
这很正常。 “num”键是不可变的整数对象。其中一些(从 -100 到 256 左右)是在启动时预先创建的,并且总是被重复使用。
标签: python deep-copy dictionary-comprehension