2017-07-17 42 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

相關問題