我需要一个非常大的列表,并且正在尝试计算我可以将它设置为多大,以便它仍然适合1-2GB的RAM。我正在使用64位(x86_64)上的CPython实现。
- 编辑:感谢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条答案
按热度按时间tnkciper1#
起点:
和python帮助中:
kcrjzv8t2#
如果需要数值列表,标准的array模块提供了优化的数组(具有append方法)。
非标准但常用的NumPy模块为您提供了固定大小的高效数组。