我试图从0迭代到sys.maxint但得到'MemoryError'。我该怎么做?。
以下是简单的代码段。
for i in range(sys.maxint):
a = 1
错误:回溯(最近一次调用最后一次): 文件“”,第1行,in 的MemoryError
答案 0 :(得分:10)
在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),你可以使用{{ 1}}而不是xrange
。语义是相同的,但它返回一个惰性迭代器而不是列表。
即使您使用range
,仍需要永远计算到xrange
,但这是一个不同的问题,如果您计划突破该问题可能无关紧要for循环比那更早。在应用程序开发期间请注意这一点。
最后一点,在Python 3中,2**63-1
消失了,xrange
是构造惰性迭代器的函数。要在Python 2中获得等效的range
,您可以执行range