我正在尝试从 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))
我是一名优秀的程序员,十分优秀!