python?memory_profiler庫(kù)生成器和迭代器內(nèi)存占用的時(shí)間分析
不進(jìn)行計(jì)算時(shí),生成器和list空間占用
import time
from memory_profiler import profile
@profile(precision=4)
def list_fun():
start = time.time()
total = ([i for i in range(5000000)])
print('iter_spend_time:',time.time()-start)
@profile(precision=4)
def gent_func():
gent_start = time.time()
total = (i for i in range(5000000))
print('gent_spend_time:',time.time()-gent_start)
iter_fun()
gent_func()
顯示結(jié)果的含義:第一列表示已分析代碼的行號(hào),第二列(Mem 使用情況)表示執(zhí)行該行后 Python 解釋器的內(nèi)存使用情況。第三列(增量)表示當(dāng)前行相對(duì)于最后一行的內(nèi)存差異。最后一列(行內(nèi)容)打印已分析的代碼。
分析:在不進(jìn)行計(jì)算的情況下,列表list和迭代器會(huì)占用空間,但對(duì)于生成器不會(huì)占用空間
當(dāng)需要計(jì)算時(shí),list和生成器的花費(fèi)時(shí)間和占用內(nèi)存
使用sum內(nèi)置函數(shù),list和生成器求和10000000個(gè)數(shù)據(jù),list內(nèi)存占用較大,生成器花費(fèi)時(shí)間大概是list的兩倍
import time
from memory_profiler import profile
@profile(precision=4)
def iter_fun():
start = time.time()
total = sum([i for i in range(10000000)])
print('iter_spend_time:',time.time()-start)
@profile(precision=4)
def gent_func():
gent_start = time.time()
total = sum(i for i in range(10000000))
print('gent_spend_time:',time.time()-gent_start)
iter_fun()
gent_func()
比較分析,如果需要對(duì)數(shù)據(jù)進(jìn)行迭代使用時(shí),生成器方法的耗時(shí)較長(zhǎng),但內(nèi)存使用方面還是較少,因?yàn)槭褂蒙善鲿r(shí),內(nèi)存只存儲(chǔ)每次迭代計(jì)算的數(shù)據(jù)。分析原因時(shí)個(gè)人認(rèn)為,生成器的迭代計(jì)算過程中,在迭代數(shù)據(jù)和計(jì)算直接不斷轉(zhuǎn)換,相比與迭代器對(duì)象中先將數(shù)據(jù)全部保存在內(nèi)存中(雖然占內(nèi)存,但讀取比再次迭代要快),因此,生成器比較費(fèi)時(shí)間,但占用內(nèi)存小。
記錄數(shù)據(jù)循環(huán)求和500000個(gè)數(shù)據(jù),迭代器和生成器循環(huán)得到時(shí)
總結(jié):幾乎同時(shí)完成,迭代器的占用內(nèi)存較大
import time
from memory_profiler import profile
itery = iter([i for i in range(5000000)])
gent = (i for i in range(5000000))
@profile(precision=4)
def iter_fun():
start = time.time()
total= 0
for item in itery:
total+=item
print('iter:',time.time()-start)
@profile(precision=4)
def gent_func():
gent_start = time.time()
total = 0
for item in gent:
total+=item
print('gent:',time.time()-gent_start)
iter_fun()
gent_func()
list,迭代器和生成器共同使用sum計(jì)算5000000個(gè)數(shù)據(jù)時(shí)間比較
總結(jié):list+sum和迭代器+sum計(jì)算時(shí)長(zhǎng)差不多,但生成器+sum計(jì)算的時(shí)長(zhǎng)幾乎長(zhǎng)一倍,
import time
from memory_profiler import profile
@profile(precision=4)
def list_fun():
start = time.time()
print('start!!!')
list_data = [i for i in range(5000000)]
total = sum(list_data)
print('iter_spend_time:',time.time()-start)
@profile(precision=4)
def iter_fun():
start = time.time()
total = 0
total = sum(iter([i for i in range(5000000)]))
print('total:',total)
print('iter_spend_time:',time.time()-start)
@profile(precision=4)
def gent_func():
gent_start = time.time()
total = sum(i for i in range(5000000))
print('total:',total)
print('gent_spend_time:',time.time()-gent_start)
list_fun()
iter_fun()
gent_func()
到此這篇關(guān)于python memory_profiler庫(kù)生成器和迭代器內(nèi)存占用的時(shí)間分析的文章就介紹到這了,更多相關(guān)python的memory_profiler 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python數(shù)據(jù)類型之Set集合實(shí)例詳解
這篇文章主要介紹了Python數(shù)據(jù)類型之Set集合,結(jié)合實(shí)例形式詳細(xì)分析了Python數(shù)據(jù)類型中集合的概念、原理、創(chuàng)建、遍歷、交集、并集等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
Python中的is和==比較兩個(gè)對(duì)象的兩種方法
這篇文章主要介紹了Python中的is和==比較兩個(gè)對(duì)象的兩種方法的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
詳解PyQt5 GUI 接收UDP數(shù)據(jù)并動(dòng)態(tài)繪圖的過程(多線程間信號(hào)傳遞)
這篇文章主要介紹了PyQt5 GUI 接收UDP數(shù)據(jù)并動(dòng)態(tài)繪圖(多線程間信號(hào)傳遞),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
python中shape[0]與shape[1]的說(shuō)明
這篇文章主要介紹了python中shape[0]與shape[1]的說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Python實(shí)現(xiàn)倉(cāng)庫(kù)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)倉(cāng)庫(kù)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Python 實(shí)現(xiàn)毫秒級(jí)淘寶搶購(gòu)腳本的示例代碼
本篇文章主要介紹了Python 通過selenium實(shí)現(xiàn)毫秒級(jí)自動(dòng)搶購(gòu)的示例代碼,通過掃碼登錄即可自動(dòng)完成一系列操作,搶購(gòu)時(shí)間精確至毫秒,可搶加購(gòu)物車等待時(shí)間結(jié)算的,感興趣的小伙伴們可以參考一下2019-09-09
python解釋模型庫(kù)Shap實(shí)現(xiàn)機(jī)器學(xué)習(xí)模型輸出可視化
Shap 是一個(gè)開源的 python 庫(kù),用于解釋模型。它可以創(chuàng)建多種類型的可視化,有助于了解模型和解釋模型是如何工作的。在本文中,我們將會(huì)分享一些Shap創(chuàng)建的不同類型的機(jī)器學(xué)習(xí)模型可視化2021-11-11
PyQt5實(shí)現(xiàn)用戶登錄GUI界面及登錄后跳轉(zhuǎn)
PyQt5是強(qiáng)大的GUI工具之一,通過其可以實(shí)現(xiàn)優(yōu)秀的桌面應(yīng)用程序。本文主要介紹了PyQt5實(shí)現(xiàn)用戶登錄GUI界面及登錄后跳轉(zhuǎn),具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11

