【发布时间】:2011-11-07 00:27:08
【问题描述】:
我刚刚试验了内存中 python 数据结构的大小。我写了以下sn-p:
import sys
lst1=[]
lst1.append(1)
lst2=[1]
print(sys.getsizeof(lst1), sys.getsizeof(lst2))
我在以下配置上测试了代码:
- Windows 7 64bit,Python3.1:输出为:
52 40所以 lst1 有 52 字节,lst2 有 40 字节。 - Ubuntu 11.4 32bit with Python3.2:输出为
48 32 - Ubuntu 11.4 32bit Python2.7:
48 36
谁能向我解释为什么这两种尺寸不同,尽管它们都是包含 1 的列表?
在 getsizeof 函数的 python 文档中,我发现了以下内容:...adds an additional garbage collector overhead if the object is managed by the garbage collector. 我的小示例中可能是这种情况吗?
【问题讨论】:
-
列表不是增量分配的,而是在“块”中分配的(随着列表变大,块也会变大)。这是必需的,以便附加数据的摊销成本较低。所以我猜分配器在这两种情况下的工作方式不同。但实际上,您为什么如此关心列表的分配方式?如果您需要知道某物的大小,请使用 sys.getsizeof()。
-
@andrew cooke:请给出答案,这几乎是全部交易。
-
@andrew-cooke 我只是对低级实现感到好奇,不会在实际问题中使用它。
-
@halex:你可以阅读实现,Python 是开源的。
-
@Jochen:我很好奇所以就这么做了。请参阅下面的答案
标签: python python-3.x