Skip to main content
 首页 » 编程设计

python之如何在 Python 中使用 for 循环从 0 迭代到 sys.maxint

2025年05月04日10JeffreyZhao

我正在尝试从 0 迭代到 sys.maxint 但出现“MemoryError”。我应该怎么做?

这是简单的代码片段。

for i in range(sys.maxint): 
  a = 1 

错误:回溯(最后一次调用): 文件“”,第 1 行,位于 内存错误

请您参考如下方法:

在 Python 2 中,range 关键字构造一个列表,其中包含您指定范围内的所有数字。所以如果你想创建一个最大 2**31-1 的范围,它必须为 4*(2**31-1) 字节分配空间(大约8.5 GB)。您可能没有那么多内存。

2**31-1 假定您使用的是 32 位 python。对于 64 位 python,maxint 是 2**63-1。您绝对没有那么多 ram(8*(2**63-1) = 大约 7300 万 Tb)。

如果你想在 Python 2 中遍历一组数字并且不想提前构建这些数字的完整列表(从而使用那么多 ram),你可以使用 xrange 而不是 range。语义相同,但它返回惰性迭代器而不是列表。

即使你确实使用了xrange,它仍然需要很长时间才能计数到2**63-1,但这是一个不同的问题,可能无关紧要如果您计划早于此打破 for 循环。请在应用程序开发期间注意这一点。

最后注意,在 Python 3 中,xrange 没有了,range 是构造惰性迭代器的函数。要在 Python 2 中获得与 range 等效的内容,您可以执行 list(range(v))