В Python каждый класс может иметь атрибуты экземпляров. По умолчанию, Python использует словарь для хранения атрибутов объекта. Это очень удобно, поскольку позволяет добавлять новые атрибуты во время исполнения программы.
Однако, для небольших классов с известными атрибутами такой подход может стать проблемой. Словари занимают большой объём оперативной памяти. Python не может просто выделить заданное количество памяти при создании объекта для хранения его атрибутов. Поэтому большое число объектов будет занимать много оперативной памяти (я говорю о тысячах и миллионах). Тем не менее, существует способ обойти эту проблему. Он включает использование __slots__, чтобы Python не создавал словари под хранение атрибутов, а выделял заданный объём памяти для ограниченного числа атрибутов. Вот пример с использованием __slots__ и без:
Без__slots__:
classMyClass(object):def__init__(self,name,identifier): self.name = name self.identifier = identifier self.set_up()# ...
С использованием__slots__:
classMyClass(object):__slots__= ['name','identifier']def__init__(self,name,identifier): self.name = name self.identifier = identifier self.set_up()# ...
Второй пример кода уменьшит потребление оперативной памяти. Некоторые люди отмечают 40 и 50% сокращение потребления оперативной памяти при использовании этого решения.
Как вариант, вам может дать шанс PyPy. Он выполняет подобную оптимизацию по умолчанию.