关于python:当范围很大时,“for / range”会占用大量内存吗?

Does “for / range” consume a lot of memory when the range is large?

本问题已经有最佳答案,请猛点这里访问。

我关心的是:

1
2
for i in range(1000000000):
    ...

从一个幼稚的角度来看,我假设在循环开始之前分配和初始化一个100000000个整数的数组,并且仅在循环结束之后释放。

因此,我想知道是否应该用以下内容替换它:

1
2
3
4
i = 0
while i < 1000000000:
    ...
    i += 1

但是根据这个答案,执行for循环的速度比等效的while循环快。

那么,我是否必须解决这种权衡,或者我的上述假设是错误的,并且在迭代大型range时没有显著的内存影响?


是的,在python-2.x中,range将创建整个列表。

但你不一定需要一个while循环,你也可以使用lazy-range替代:xrange

1
2
for i in xrange(1000000000):
    ...