【发布时间】:2019-01-31 00:20:30
【问题描述】:
import sys, copy
x = [None]
y = x
c = copy.copy(x)
dc = copy.deepcopy(x)
print(x, y, c, dc) # [None] [None] [None] [None]
print(sys.getsizeof([0])) # 72
print(sys.getsizeof(["0"])) # 72
print(sys.getsizeof(x)) # 72
print(sys.getsizeof(y)) # 72
print(sys.getsizeof(c)) # 96
print(sys.getsizeof(dc)) # 96
我知道sys.getsizeof (docs) 返回容器(列表)本身的大小,而不考虑内容,所以我知道它返回相同的大小(72) [0], [None] and ["0"].
但是,为什么副本或深副本需要更多内存来保存相同的数据(96 而不是 72)?
docs 状态:
getsizeof() 调用对象的 __sizeof__ 方法,如果对象由垃圾收集器管理,则会增加额外的垃圾收集器开销。
因此,造成这种差异的唯一合理原因是垃圾收集器对副本的处理方式不同,对吧?但为什么会这样呢?
我的环境:Win 10,Python 3.4.3 64 位
【问题讨论】:
-
我在 3.6.6 版本中得到 sizeof(c) 72
标签: python