我需要一个非常大的列表,并且试图弄清楚我可以做到多大,以便它仍然适合1-2GB的RAM。我在64位(x86_64)上使用CPython实现。Python:列表的每个元素需要多少空间?
编辑:感谢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是一个空的用户空间物体)
如果可以共享有关所观察到的大小,这将是巨大更一般的数据。例如:
- 是否有特殊情况(我认为不可变的值可能是共享的,所以也许一个bools列表不会为数据占用额外的空间)?
- 也许小的列表需要X字节的开销,但大的列表需要Y字节的开销?
你可能想用你添加的信息来回答你自己的问题,但是很明显bua已经回答了你问题的主要部分,而EOL提供了一种更准确的预测方式和更多的内容到RAM中。 – 2009-11-05 14:32:33
这是发布为必须作为链接唯一答案删除的答案,但它似乎可能有用,所以我将其作为评论发布。本周的Python模块做了一篇关于Python内存管理的文章,您可以在这里查看:http://pymotw.com/2/sys/limits.html – ArtOfWarfare 2014-11-02 13:15:11