我想知道返回哪個更好:元素列表或生成該列表中每個元素的生成器。檢查了每個發(fā)電機的尺寸后,發(fā)現(xiàn)發(fā)電機要小得多。from sys import getsizeofmy_list = [i for i in range(100)]my_gen = (i for i in my_list)print(getsizeof(my_list)) # prints "452"print(getsizeof(my_gen)) # prints "56"生成器如何占用如此少的內(nèi)存?
2 回答

慕勒3428872
TA貢獻1848條經(jīng)驗 獲得超6個贊
生成器的大小不受列表大小的影響。
from sys import getsizeof
short_list = [i for i in range(10)]
long_list = [i for i in range(100)]
print(getsizeof(short_list))? # prints '92'
print(getsizeof(long_list))? # prints '452'
gen_short_list = (i for i in short_list)
gen_long_list = (i for i in long_list)
print(getsizeof(gen_short_list))? # prints '56'
print(getsizeof(gen_long_list))? # prints '56'
除此之外,返回對象的大小并不重要。那么,我們開始吧。

天涯盡頭無女友
TA貢獻1831條經(jīng)驗 獲得超9個贊
檢查生成器文檔。這是一種動態(tài)生產(chǎn)物品的模式。在Python中使用關(guān)鍵字yield
andyield from
可以很好地處理無限數(shù)據(jù)結(jié)構(gòu),特別是因為生成器的構(gòu)造。
添加回答
舉報
0/150
提交
取消