Магия __slots__

В Python каждый класс может иметь атрибуты экземпляра. По умолчанию Python использует dict для хранения атрибутов экземпляра объекта. Это действительно полезно, поскольку позволяет создавать произвольные новые атрибуты во время выполнения.

Однако для небольших классов с заранее известным набором атрибутов это может стать узким местом. Так как dict расходует много оперативной памяти. Python не может просто выделить статический объем памяти при создании объекта для хранения всех атрибутов. Поэтому, если вы создаете много объектов, то вы расходуете много оперативной памяти (при создании тысяч и миллионов объектов). Тем не менее, есть способ обойти эту проблему. Он заключается в использование __slots__, чтобы указать Python не использовать dict, а выделять место только для фиксированного набора атрибутов. Вот пример с и без __slots__:

Пример без использования __slots__:

Пример  __slots__:

Второй фрагмент кода уменьшит нагрузку на вашу оперативную память. Некоторые люди наблюдали сокращение использования оперативной памяти почти на 40-50% при использовании этой техники.

Оригинал статьи http://book.pythontips.com/en/latest/__slots__magic.html

Обсуждение закрыто.