大型数组上的Python MemoryError

Adi*_*ava 5 python memory

这是我正在尝试运行的python脚本:

n = 50000000000 ##50 billion 
b = [0]*n
for x in range(0,n):
    b[x] = random.randint(1,899999)
Run Code Online (Sandbox Code Playgroud)

......但我得到的输出是:

E:\python\> python sort.py
Traceback (most recent call last):
  File "E:\python\sort.py", line 8, in <module>
    b = [0]*n
MemoryError
Run Code Online (Sandbox Code Playgroud)

那么,我现在该怎么办?

Ten*_*2xh 7

您生成的列表的大小(500亿不是5).

一个int对象实例需要24个字节(sys.getsizeof(int(899999)),随机数的上限),因此列表将占用50,000,000,000 * 24 bytes,大约是1.09 TB.

换句话说,要创建这样的列表,您的计算机中至少需要1118 GB的RAM.

我不知道你的用例是什么,但你应该考虑一种不同的方法来解决你想要解决的问题(可能是定义一个生成器,或者只是不将你的数字存储在内存中,而是直接使用for中的数字)环).