Skip to main content
 首页 » 编程设计

Python 列表内存错误

2025年05月04日51exmyth

我正在尝试创建一个包含 2 个元素到 30 个元素的列表,但出现内存错误。为什么这样?它是否超出了 python 列表的最大限制?

m=[None]*(2**30) 

请您参考如下方法:

是的,Python 列表可以容纳多少个元素是有限制的,请参阅 sys.maxsize .但是你没有击中它;很少有机器有足够的内存来容纳那么多项目。

您正在尝试创建一个包含 1073741824 个引用的列表;每个引用也占用内存。这取决于您的操作系统有多少,但对于 32 位系统通常是 4 个字节,对于 64 位操作系统是 8 个字节,其中 2^30 个元素将占用 4 GB 或 8GB 内存,仅用于列表引用

4GB 加上其他元素已经很容易超过大多数当前操作系统允许单个进程在内存中使用的容量。

在我的 Mac OS X 机器上(使用 64 位操作系统),sys.maxsize 是 2^63,列表中的 Python 对象引用占用 8 个字节:

>>> import sys 
>>> sys.maxsize 
9223372036854775807 
>>> sys.maxsize.bit_length() 
63 
>>> sys.getsizeof([])  # empty list overhead 
72 
>>> sys.getsizeof([None]) - sys.getsizeof([])  # size of one reference 
8 

因此,要创建一个包含 sys.maxsize 元素的列表,您需要 64 exbibytes内存,仅供引用。这超过了 64 位计算机可以解决的问题(practical maximum is about 16 exbibytes)。

所有这些都忽略了您在列表中引用的对象将占用的内存空间。 None 是单例,因此它只会占用固定数量的内存。但大概您要在该列表中存储一些其他的东西,在这种情况下您也需要考虑到这一点。

一般来说,您永远不需要创建这么大的列表。使用不同的技术;例如,使用字典创建稀疏结构,我怀疑您是否计划直接在算法中处理所有这些 2^30 索引。