【python】__slots__は速度的にどうなのか
概要
__slots__を使うとメモリをケチれるという話はよく見かけますが、属性アクセスの速度については話を聞かないので調べてみました。
実験コード
import timeit class A_slots: __slots__ = ["a"] def __init__(self): self.a = 42 class A_attr: def __init__(self): self.a = 42 a_s = A_slots() a_a = A_attr() for a in [a_s, a_a]: print("{:.4f}".format(timeit.timeit(lambda : a.a)))
大したことはやっていません。
結果
0.1026 0.1114
何回かやっても__slots__に定義した方が1割ほど速いという結果になりました。でも10^6回やって0.1秒なので、ほとんど問題にならないかも。
おまけ
>>> import timeit >>> timeit.timeit(lambda :None) 0.08125272499659332
timeitだけでこれくらいの時間がかかるので、実質2~3倍くらいは速いことになります。