大数组上的 Python MemoryError

标签 python memory

这是我要运行的 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

那么,我现在该怎么办?

最佳答案

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

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

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

我不知道你的用例是什么,但你应该考虑一种不同的方法来解决你试图解决的问题(也许定义一个 generator ,或者只是不要将你的数字存储在内存中,而是直接使用for 循环中的数字)。

关于大数组上的 Python MemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44056624/

相关文章:

python - 如何避免具有多列的 numpy 数组的总和精度较低

java - 我想将字符串和整数转换为无符号字节

c++ - 如何读取 gdb 中的内存地址以进行 i7 处理器代码反汇编?

python - 使用多个键之一过滤字典

python - 对象属性的 Numpy 数组

python - ImportError - GAE 中没有名为 main 的模块

c++ - VC++中未初始化的内存块

c - 如何释放函数中分配的内存

ios - 苹果自己的 ASLR 实现是如何工作的?

python - 从python中的列表中选择某些元素