PEP 412, реализованный в Python 3.3, представляет собой улучшенную обработку словарей атрибутов, что эффективно уменьшает объем памяти экземпляров класса. __slots__
был разработан с той же целью, так что есть ли смысл использовать __slots__
больше?
В попытке самостоятельно выяснить ответ, я запускаю следующий тест, но результаты не имеют большого смысла:
class Slots(object):
__slots__ = ['a', 'b', 'c', 'd', 'e']
def __init__(self):
self.a = 1
self.b = 1
self.c = 1
self.d = 1
self.e = 1
class NoSlots(object):
def __init__(self):
self.a = 1
self.b = 1
self.c = 1
self.d = 1
self.e = 1
Python 3.3 Результаты:
>>> sys.getsizeof([Slots() for i in range(1000)])
Out[1]: 9024
>>> sys.getsizeof([NoSlots() for i in range(1000)])
Out[1]: 9024
Результаты Python 2.7:
>>> sys.getsizeof([Slots() for i in range(1000)])
Out[1]: 4516
>>> sys.getsizeof([NoSlots() for i in range(1000)])
Out[1]: 4516
Я бы ожидал, что размер будет отличаться, по крайней мере, для Python 2.7, поэтому я предполагаю, что что-то не так с тестом.