[英]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.