Python:列表中每个元素占用多少空间?
我需要一个非常大的列表,正在尝试弄清楚我能做多大,以便它仍然能适应1-2GB的内存。我使用的是CPython的实现,运行在64位系统上(x86_64)。
编辑:感谢bua的回答,我补充了一些更具体的内容。
以下是一些内存使用情况(以字节为单位):
- 列表本身的大小
sys.getsizeof([]) == 72
- 每个列表项的大小(不包括数据)
sys.getsizeof([0, 1, 2, 3]) == 104
,所以每个项有8字节的额外开销。
- 如果数据是整数,它的大小
sys.getsizeof(2**62) == 24
(但根据整数的大小会有所不同)sys.getsizeof(2**63) == 40
sys.getsizeof(2**128) == 48
sys.getsizeof(2**256) == 66
- 如果数据是对象(我猜是
sizeof(Pyobject)
)sys.getsizeof(C()) == 72
(C是一个空的用户自定义对象)
如果你能分享一些关于观察到的大小的更一般的数据,那就太好了。例如:
- 有没有特殊情况(我觉得不可变值可能会共享,所以布尔值的列表可能不会占用额外的空间)?
- 也许小列表的开销是X字节,但大列表的开销是Y字节?
2 个回答
12
开始的地方:
>>> import sys
>>> a=list()
>>> type(a)
<type 'list'>
>>> sys.getsizeof(a)
36
>>> b=1
>>> type(b)
<type 'int'>
>>> sys.getsizeof(b)
12
还有来自Python帮助文档的内容:
>>> help(sys.getsizeof)
Help on built-in function getsizeof in module sys:
getsizeof(...)
getsizeof(object, default) -> int
Return the size of object in bytes.