gpt4 book ai didi

python - 内存错误分配 11,464,882 个空字典的列表

转载 作者:IT王子 更新时间:2023-10-28 23:37:25 29 4
gpt4 key购买 nike

我正在使用可移植 python 2.7.5.1。

下面一行:

x = [{} for i in range(11464882)]

导致内存错误(没有其他消息):

>>> 
Traceback (most recent call last):
File "<module1>", line 12, in <module>
MemoryError
>>>

注意:只有第 1-11 行的注释。

在上面的有趣数字中减少一个单位错误消失。

考虑到 1100 万并没有那么大,我相信一定有一些简单的设置可以增加我的程序可用的内存量。

那么,这是我缺少的简单东西还是固有的内存限制?

最佳答案

在我的 Mac OS X 10.8.5 64 位笔记本电脑上,range(11464882) 对象需要:

>>> import sys
>>> sys.getsizeof(range(11464882))
91719128
>>> sys.getsizeof(11464881) # largest number
24
>>> sys.getsizeof(0) # smalest number
24
>>> 91719128 + (24 * 11464882) # bytes
366876296
>>> (91719128 + (24 * 11464882)) / (1024.0 ** 2) # mb
349.88050079345703

所以 350 兆字节的内存。

这里,sys.getsizeof()返回给定 Python 对象的内存占用不计算包含的值。因此,对于列表,它只是列表结构所需的内存;簿记信息加上 1100 万个 64 位指针。

另外,很多空字典都取:

>>> sys.getsizeof({})
280
>>> 91719128 + 280 * 11464882
3301886088
>>> (91719128 + 280 * 11464882) / (1024.0 ** 2) # mb
3148.923957824707
>>> (91719128 + 280 * 11464882) / (1024.0 ** 3) # gb
3.0751210525631905

3 GB 内存。 1100 万乘以 280 字节很大的空间。

加上其他开销(很可能是垃圾回收周期检测、Python 进程本身和内存值),这意味着您达到了机器的每进程 4GB 内存限制。

如果您运行的是 32 位二进制文​​件,则大小会更小,因为您只需要 32 位指针的空间,但您也只能获得 2GB 的可寻址内存来容纳所有对象。

关于python - 内存错误分配 11,464,882 个空字典的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19456559/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com