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位
答案 0 :(得分:3)
列表使用大小调整策略,该策略有时涉及在末端保留备用空间以容纳更多元素,以确保摊销固定时间的追加。您的某些列表最后具有比其他列表更多的可用空间。 Python不保证任何列表都会有多少可用空间。