Python не устраняет накладные расходы на подобные структуры.Сожалею.Его динамическая природа затрудняет такие оптимизации компилятора.Но тогда я не знаю ни одного языка, который бы устранял накладные расходы, связанные с хранением вещей в словарях.
dict (без владельца), вероятно, включает в себя все словари, которые вы создаете внутри своего объекта.Они помечены как не имеющие владельца, поскольку они не являются словарями для экземпляров объектов.
Что вы можете сделать:
Используйте __slots__
, если вы добавите __slots__ = ('the','names','of','fields')
в качестве атрибута класса, python будет использовать более эффективную реализацию класса.Это избавит от словаря, используемого для хранения атрибутов.
Если ваши словари могут быть переписаны для использования списков, которые могли бы улучшить ситуацию.Списки более эффективны по памяти, чем словари.
Для максимальной эффективности вы должны переработать свою систему, чтобы использовать массивы.Каждый атрибут в вашем классе станет массивом размером 256 * 256.Каждый элемент будет храниться очень эффективно в этом случае.
Кроме того, вы можете оформить заказ PyPy.Он предоставляет альтернативную реализацию Python с JIT, а также различные оптимизации времени / пространства, которые могут помочь.
sys.getsizeof не сообщает, о чем вы думаете, что сообщает.sys.getsizeof(myobj.Container)
сообщает размер объекта класса, а не размер фактических объектов контейнера.Вы хотите sys.getsizeof(myobj.Container())
или подобное.Даже это не точно, потому что оно не включает ничего кроме базового объекта.Он не учитывает словарь, содержащий атрибуты.Он сообщит только размер третьей строки в вашем отчете.