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__
后,python會使用一種更加緊湊的內部表示。
實例通過一個很小的固定大小的數組來構建,而不是為每個實例定義
一個字典,這跟元組或列表很類似。在__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