这是我正在尝试运行的python脚本:
n = 50000000000 ##50 billion
b = [0]*n
for x in range(0,n):
b[x] = random.randint(1,899999)
......但我得到的输出是:
E:\python\> python sort.py
Traceback (most recent call last):
File "E:\python\sort.py", line 8, in <module>
b = [0]*n
MemoryError
那么,我现在该怎么办?
答案 0 :(得分:7)
您正在生成的列表的大小(500亿不是5)。
int
对象实例占用24个字节(sys.getsizeof(int(899999))
,即随机数的上限),因此该列表将占用50,000,000,000 * 24 bytes
,大约 1.09 TB < /强>
换句话说,要创建这样的列表,您的计算机中至少需要 1118 GB的内存。
我不知道你的用例是什么,但你应该考虑一种不同的方法来解决你想要解决的问题(可能定义一个generator,或者只是不将你的数字存储在内存中而是直接使用for循环中的数字。)
答案 1 :(得分:-1)
另一种可能性是增加计算机的虚拟内存。它帮助了我的代码。我有最大3000MB的虚拟内存,当我将其增加到5000MB时,内存错误消失了。