質問
Pythonの__slots__
は self.__dict__
を保つ必要がなくなるため、メモリの節約になるという記述を
「実践Python3」のFlyweightパターンの中でみたのですが、実際ためしてみたらそんなことはなかったです。
確かに __slots__
を定義するとobj.__dict__
は無くなっているので、メモリは節約できているような気がするのですが、
実際にsys.getsizeof()
でメモリ使用量を見ると__slots__
なしの方がメモリを節約できているのはなんでなのでしょうか?
サンプルコード
python
1import sys 2 3 4def main(): 5 print(sys.getsizeof(Point1)) # => 888 6 print(sys.getsizeof(Point2)) # => 1056 7 8 p1 = Point1() 9 p2 = Point2() 10 11 print(sys.getsizeof(p1)) # => 88 12 print(sys.getsizeof(p2)) # => 56 13 14 # print(p1.__dict__) # => エラーになるので略 15 print(p2.__dict__) # => {'x': 0, 'y': 0, 'z': 0, 'a': 0, 'b': 0, 'c': 0} 16 17 18class Point1(object): 19 __slots__ = ['x', 'y', 'z', 'a', 'b', 'c'] 20 21 def __init__(self): 22 self.x = 0 23 self.y = 0 24 self.z = 0 25 self.a = 0 26 self.b = 0 27 self.c = 0 28 29 30class Point2(object): 31 32 def __init__(self): 33 self.x = 0 34 self.y = 0 35 self.z = 0 36 self.a = 0 37 self.b = 0 38 self.c = 0 39 40if __name__ == "__main__": 41 main() 42
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/20 16:08