python 節省內存的for循環技巧


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM