Python:列表的每个元素占用多少空间?

时间:2009-11-05 13:04:35

标签: python memory list performance

我需要一个非常大的列表,并试图弄清楚我能做多大,以便它仍然适合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是一个空的用户空间对象)

如果您可以分享有关观察到的尺寸的更多一般数据,那就太棒了。例如:

  • 是否存在特殊情况(我认为可以共享不可变值,因此bool列表可能不会占用数据的额外空间)?
  • 也许小型列表需要X字节开销,但是大型列表需要Y字节开销?

2 个答案:

答案 0 :(得分:9)

指向开始:

>>> import sys
>>> a=list()
>>> type(a)
<type 'list'>
>>> sys.getsizeof(a)
36
>>> b=1
>>> type(b)
<type 'int'>
>>> sys.getsizeof(b)
12

并从python help:

>>> help(sys.getsizeof)
Help on built-in function getsizeof in module sys:

getsizeof(...)
    getsizeof(object, default) -> int

    Return the size of object in bytes.

答案 1 :(得分:6)

如果需要数值列表,标准array模块提供优化数组(具有追加方法)。

非标准但常用的NumPy模块为您提供固定大小的高效数组。