欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python?memory_profiler庫生成器和迭代器內(nèi)存占用的時間分析

 更新時間:2022年06月28日 14:41:48   作者:MAR-Sky  
這篇文章主要介紹了python?memory_profiler庫生成器和迭代器內(nèi)存占用的時間分析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,感興趣的小伙伴可以參考一下

不進(jìn)行計算時,生成器和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é)果的含義:第一列表示已分析代碼的行號,第二列(Mem 使用情況)表示執(zhí)行該行后 Python 解釋器的內(nèi)存使用情況。第三列(增量)表示當(dāng)前行相對于最后一行的內(nèi)存差異。最后一列(行內(nèi)容)打印已分析的代碼。
分析:在不進(jìn)行計算的情況下,列表list和迭代器會占用空間,但對于
生成器不會占用空間

當(dāng)需要計算時,list和生成器的花費(fèi)時間和占用內(nèi)存

使用sum內(nèi)置函數(shù),list和生成器求和10000000個數(shù)據(jù),list內(nèi)存占用較大,生成器花費(fèi)時間大概是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()

比較分析,如果需要對數(shù)據(jù)進(jìn)行迭代使用時,生成器方法的耗時較長,但內(nèi)存使用方面還是較少,因為使用生成器時,內(nèi)存只存儲每次迭代計算的數(shù)據(jù)。分析原因時個人認(rèn)為,生成器的迭代計算過程中,在迭代數(shù)據(jù)和計算直接不斷轉(zhuǎn)換,相比與迭代器對象中先將數(shù)據(jù)全部保存在內(nèi)存中(雖然占內(nèi)存,但讀取比再次迭代要快),因此,生成器比較費(fèi)時間,但占用內(nèi)存小。

記錄數(shù)據(jù)循環(huán)求和500000個數(shù)據(jù),迭代器和生成器循環(huán)得到時

總結(jié):幾乎同時完成,迭代器的占用內(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計算5000000個數(shù)據(jù)時間比較

總結(jié):list+sum和迭代器+sum計算時長差不多,但生成器+sum計算的時長幾乎長一倍,

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庫生成器和迭代器內(nèi)存占用的時間分析的文章就介紹到這了,更多相關(guān)python的memory_profiler 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論