1. 程式人生 > >python的__slots__節約內存的魔法

python的__slots__節約內存的魔法

方法 comment nts val tps 內存 不能 comm lan

  在Python中,每個類都有實例屬性。默認情況下Python用一個字典來保存一個對象的實例屬性。這非常有用,因為它允許我們在運行時去設置任意的新屬性。

  然而,對於有著已知屬性的小類來說,它可能是個瓶頸。這個字典浪費了很多內存。Python不能在對象創建時直接分配一個固定量的內存來保存所有的屬性。因此如果你創建許多對象(我指的是成千上萬個),它會消耗掉很多內存。
  不過還是有一個方法來規避這個問題。這個方法需要使用__slots__來告訴Python不要使用字典,而且只給一個固定集合的屬性分配空間。

  結合工具ipython_memory_usage查看下效果:

使用__slots__的情況:

  技術分享圖片

不使用__slots__的情況:

技術分享圖片

來源:https://eastlakeside.gitbooks.io/interpy-zh/content/slots_magic/

python的__slots__節約內存的魔法