例を制限するクラス属性__slot__属性フィールドで定義され、多数のオブジェクトの場合にはメモリフットプリントを削減するために作成することができます。
オブジェクトは、メモリフットプリントの比較を大量に作成することです:
- クラスは__slot__使用していません
クラスMySlot:DEF __init__ (自己、A、B、C): self.a = self.b = Bの self.c = C @profile()DEF メイン(): myObj_list = リスト() のための I における範囲(50000 ): このmyobj = MySlot(I、I、I) myObj_list.append(このmyobj)
結果:
ライン#メモリ使用量インクリメント行内容
=========================================== =====
401 39.7 39.7のMIBのMIB @profile()
:402 DEFメイン()
403 39.7のMIB 0.0のMIB myObj_list =リスト()
の範囲内のiについて404 49.9のMIB 0.0 MIBを設定する(50000):
405 49.9のMIB 0.1のMIBこのmyobj = MySlot(I、I、I)
406 49.9のMIB 0.4のMIB myObj_list.append(このmyobj)
10M程度のメモリを取ります
- クラスの使用__slot__
クラスMySlot: __slots__ =(' A '、' B '、' C ' ) デフ __init__ (自己、A、B、C): self.a = self.b = Bの self.c = C @profile()DEF メイン(): myObj_list = リスト() のための I における範囲(50000 ): このmyobj = MySlot(I、I、I) myObj_list.append(このmyobj)
結果:
ライン#メモリ使用量インクリメント行内容
=========================================== =====
401 40.3 40.3のMIBのMIB @profile()
:402 DEFメイン()
403 40.3のMIB 0.0のMIB myObj_list =リスト()
の範囲内のiについて404 45.7のMIB 0.0 MIBを設定する(50000):
405 45.7のMIB 0.1のMIBこのmyobj = MySlot(I、I、I)
406 45.7のMIB 0.3のMIB myObj_list.append(このmyobj)
およそ500万のメモリ
- 説明
__slot__タプルが文句を言うよりも、他の属性を追加し、プロパティの値を制限する__slot__!
__slot__制限は、インスタンス属性、表示属性が追加されていないクラスを追加することです!