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时没有显著的内存影响?
- @mkrieger1:我的问题是"范围是否消耗内存",而不是"范围和xrange之间的区别是什么"。所以根据定义,这两个问题不能是重复的。这两个答案可能是,所以您可以将它们标记为重复的。
- @我的问题是"范围消耗内存",而不是"范围和xrange有什么区别"。所以根据定义,这两个问题不能是重复的。这两个答案可能是,所以您可以将它们标记为重复的。
- @我的问题是"范围是否消耗记忆",而不是"范围和xrange之间的区别是什么"。所以根据定义,这两个问题不能是重复的。这两个答案可能是,所以您可以将它们标记为重复的。
- 清除喉部stackoverflow.com/questions/45129146/&hellip;
- 三次做完全相同的评论,真是讽刺。D
是的,在python-2.x中,range将创建整个列表。
但你不一定需要一个while循环,你也可以使用lazy-range替代:xrange。
1 2
| for i in xrange(1000000000):
... |
- 型太好了,谢谢。但这最终不会像while循环那样影响性能吗?
- 型@好的振动:可能for i in xrange比while稍快,但差别不大。一般来说,对于短列表,range比xrange快,但使用的内存更多。只有当你有一种情况,你可以大量重复使用列表时,它才会明显更快,因为xrange总是在运行中生成元素,而你可以多次重复使用range的列表,它只是一个列表。在某种程度上,内存的使用将达到xrange更快的程度。在大多数情况下,两者的差别都很小,
- 型@根据我的经验,xrange比range快,除了短的range外,任何东西都比while快得多。在那里,range快一点。
- 型非常感谢您的详细解释!!!
- 型@好的振动我用我的时间安排了一个要点,如果你愿意的话,你可以自己试验一下。