Все самое полезное для питониста в одном канале.
Учиться у нас: clc.to/6e5Csg
Для обратной связи: @proglibrary_feeedback_bot
По рекламе: @tproger_sales_bot
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
Post #7436
3.17K
➕ Как уменьшить память и ускорить доступ к атрибутам в Python-классах
По умолчанию каждый объект в Python хранит атрибуты в
Гибко — да. Эффективно — не всегда:
У каждого экземпляра — свой словарь. Добавили
🚫 Но если структура объекта фиксированная, мы платим лишнюю цену за эту гибкость.
Решение:
Поведение меняется:
И главное:
Что меняется:
🔴 больше нельзя добавлять произвольные атрибуты
🔴 нет
🔴 меньше памяти на каждый объект
🔴 чуть быстрее доступ к атрибутам
Python хранит значения в компактной структуре, а не в словаре.
Используйте __slots__, если:
🔴 у вас тысячи / миллионы объектов
🔴 структура объектов фиксированная
🔴 важны память и производительность
Не стоит, если:
🔴 объект — «мешок с атрибутами»
🔴 нужна динамика и расширяемость
🔗 Статья с примерами
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
По умолчанию каждый объект в Python хранит атрибуты в
__dict__.Гибко — да. Эффективно — не всегда:
class Point:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
p = Point(1, 2, 3)
print(p.__dict__)
# {'x': 1, 'y': 2, 'z': 3}
У каждого экземпляра — свой словарь. Добавили
p.w = 4 — словарь вырос:
p.w = 4
print(p.__dict__)
# {'x': 1, 'y': 2, 'z': 3, 'w': 4}
🚫 Но если структура объекта фиксированная, мы платим лишнюю цену за эту гибкость.
Решение:
__slots__:
class Point:
__slots__ = ('x', 'y', 'z')
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
Поведение меняется:
p = Point(1, 2, 3)
p.x = 10 # ок
p.w = 4 # ❌ AttributeError
И главное:
p.__dict__
# ❌ AttributeError: object has no attribute '__dict__'
Что меняется:
🔴 больше нельзя добавлять произвольные атрибуты
🔴 нет
__dict__🔴 меньше памяти на каждый объект
🔴 чуть быстрее доступ к атрибутам
Python хранит значения в компактной структуре, а не в словаре.
Используйте __slots__, если:
🔴 у вас тысячи / миллионы объектов
🔴 структура объектов фиксированная
🔴 важны память и производительность
Не стоит, если:
🔴 объект — «мешок с атрибутами»
🔴 нужна динамика и расширяемость
🔗 Статья с примерами
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
- 👍 9
- ❤ 3











