python 節省記憶體的for迴圈技巧
阿新 • • 發佈:2021-11-08
python 記憶體節省的方法
【問題】 程式建立大量(可能上百萬)物件,導致佔用大量記憶體
【方法】
一、建立大量的物件
對於主要當成簡單的資料結構類而言,通過新增__slots__屬性來極大的減少例項所佔用的記憶體
eg:
class Date:
__slots__ = ['year', 'month', 'day']
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
原理: 定義__slots__
例項通過一個很小的固定大小的陣列來構建,而不是為每個例項定義
一個字典,這跟元組或列表很類似。在__slots__中列出得屬性名在
內部被對映到這個陣列的指定小標上。
缺點
不能再給例項新增新的屬性,只能使用__slots中定義的屬性名。
定義了slots後,類不在支援一些普通類特性, 比如多繼承。
二、 python 迴圈記憶體優化之生成器
列印內容位元組數較小時,全部載入記憶體後,再列印,沒有問題。
可是,如果成千上百萬列印資料時,存在out of memory
。
常用方法 使用itertools
模組
1、 拼接元素
itertools中chain()實現元素拼接
list(chain([1,2], [3,4]))
底層程式碼實現:
def chain(*iterables):
for it in iterables:
for it element in it:
yield element
可知,chain 本質上是一個生成器,一次讀入一個元素到記憶體,做到高效節省記憶體
2、逐個累加
返回列表的累積彙總值
參考連線:http://www.360doc.com/content/19/1221/14/21698786_881183436.shtml