簡體   English   中英

Python使用大量RAM

[英]Python uses a lot of RAM

我在下面編寫了此簡單代碼,以比較Python和Fortran的速度。

import time

start = time.time()

x = 0

for i in range(1,1000000000):
    x = x + i
    x = 0

end = time.time()

print end - start

我設置x = 0是因為在Fortran中它會溢出。 當我通過Fortran運行代碼時,它將在9秒內返回答案,但是當我通過Python運行代碼時,Python占用了系統內存的全部24GB,並且程序崩潰。

有什么問題?

您正在使用range() ,它將生成范圍內所有整數的列表對象。 您生成了一個列表對象,其中包含10 ** 9整數。 在64位的計算機上,大約需要30GB的空間來保存所有這些對象,前提是您的OS允許您分配這么多的對象。

改用xrange()函數 這將產生一個僅在迭代時產生數字的對象:

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> xrange(10)
xrange(10)
>>> list(xrange(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

在Python上加和10億個整數仍然需要時間。 您可以在此處使用sum(xrange(10**9))將大部分工作委托給C代碼,但仍將為該過程生成10億個整數對象。

我的陳舊的2008年老式Macbook Pro做到了:

>>> import timeit
>>> timeit.timeit('sum(xrange(10**9))', number=3)
38.89629793167114

因此平均需要13秒鍾才能生產和銷毀10億個int對象。 實際的總和與此處的分配和取消分配相形見.。

使用NumPy進行涉及大型數據集的計算; NumPy array包含C數據​​類型,而不是Python對象,因此將占用更少的內存,並且該庫提供了優化的例程,可以擊敗純Python可以輕松完成的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM