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

jyztefdp  于 2022-12-10  发布在  Python
关注(0)|答案(2)|浏览(173)

我需要一个非常大的列表,并且正在尝试计算我可以将它设置为多大,以便它仍然适合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字节的开销?
tnkciper

tnkciper1#

起点:

>>> 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.
kcrjzv8t

kcrjzv8t2#

如果需要数值列表,标准的array模块提供了优化的数组(具有append方法)。
非标准但常用的NumPy模块为您提供了固定大小的高效数组。

相关问题