2017-07-17 44 views
1

我关心的是关于类似:当范围很大时,“for/range”会消耗大量内存吗?

for i in range(1000000000): 
    ... 

从一个天真的观点,我认为10亿个整数数组分配和循环开始前初始化,释放循环结束之后。

所以我想知道我是否应该将其替换为:

i = 0 
while i < 1000000000: 
    ... 
    i += 1 

但根据this answer,一个for循环执行比同等while循环更快。

所以我必须为这种折衷做出解决,或者我的假设是错误的,并且在迭代大型range时没有显着的内存影响?

+0

@ mkrieger1:我的问题是“范围消耗内存”,而不是“范围和xrange之间有什么区别”。所以**按照定义**,这两个问题不能重复。这两个答案可能是,所以你可以将它们标记为重复。 – goodvibration

+0

@khelwood:我的问题是“范围消耗内存”,而不是“范围和xrange之间有什么区别”。所以**按照定义**,这两个问题不能重复。这两个答案可能是,所以你可以将它们标记为重复。 – goodvibration

+0

@ Jean-FrançoisFabre:我的问题是“范围消耗内存”,而不是“范围和xrange之间的区别”。所以**按照定义**,这两个问题不能重复。这两个答案可能是,所以你可以将它们标记为重复。 – goodvibration

回答

5

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

但是,您不一定需要while循环,您也可以使用lazy-range-alternative:xrange

for i in xrange(1000000000): 
    ... 
+0

太好了,谢谢。但是最终会不会像'while'循环那样影响性能? – goodvibration

+1

@goodvibration:可能'因为我在xrange'会比'while'稍微快一点,但差别很小。一般来说,对于短列表,“范围”将比“xrange”快,但使用更多内存。如果你有一种情况需要重复使用这个列表,那么它会明显更快,因为'xrange'将会随时生成元素,而你可以多次重复使用'range'中的列表,它只是一个列表。在某些情况下,内存使用会达到“xrange”速度更快的程度。对于*大多数*目的,差异很小, –

+0

@goodvibration根据我的经验,'xrange'将比'range'更快,并且比'while'更快,除了短'range'外。有'范围'有点快。 – MSeifert

相关问题