当范围很大时,"for/range"会占用大量内存吗?

goo*_*ion 1 python memory for-loop python-2.7

我担心的是:

for i in range(1000000000):
    ...
Run Code Online (Sandbox Code Playgroud)

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

所以我想知道我是否应该用以下代替:

i = 0
while i < 1000000000:
    ...
    i += 1
Run Code Online (Sandbox Code Playgroud)

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

那么我是否必须接受这种权衡,或者我的假设是错误的,并且在迭代大量时没有显着的内存影响range

MSe*_*ert 5

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

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

for i in xrange(1000000000):
    ...
Run Code Online (Sandbox Code Playgroud)