Русский
Открыть в Telegram

Пост ✈️Сегодня поговорим о крутой фиче Python, которая может значительно сократить потребление памяти вашими объектами. Речь …

29 ноября 2024
P
Pythoner
Фотография
✈️Сегодня поговорим о крутой фиче Python, которая может значительно сократить потребление памяти вашими объектами. Речь пойдёт об атрибуте slots! ➡️Для начала давайте разберемся, почему вообще возникла необходимость в slots. По умолчанию Python хранит атрибуты объектов в специальном словаре dict. Это удобно и гибко – можно добавлять новые атрибуты на лету. Но у такой роскоши есть цена: дополнительные накладные расходы на память. 🔎Представьте, что у вас миллион объектов класса User с парой атрибутов. Каждый такой объект тащит за собой словарь dict, а это прожорливая структура данных. И тут на сцену выходит наш герой – slots! # Без slots class User: def __init__(self, name, age): self.name = name self.age = age # Со slots class OptimizedUser: __slots__ = ['name', 'age'] def __init__(self, name, age): self.name = name self.age = age ➡️Что даёт нам slots? Вместо создания словаря Python выделяет фиксированный массив в памяти под указанные атрибуты. Это как переход от просторного лофта к компактной студии – места меньше, зато экономия налицо! ➡️Реальные цифры? На практике использование slots может сократить потребление памяти на 30-50% для простых объектов. А при работе с миллионами инстансов экономия становится более чем существенной. ➡️Где это реально пригодится: —В больших датасетах, где у вас тысячи/миллионы однотипных объектов —В микросервисах, где важна оптимизация памяти —В системах реального времени, где каждый байт на счету —В долгоживущих процессах, обрабатывающих потоки данных ➡️Подводные камни: —Нельзя добавлять новые атрибуты после определения класса —Наследование работает не так прозрачно, как с обычными классами —Некоторые метаклассы могут конфликтовать со slots ➡️Пример реального применения: class DataPoint: __slots__ = ['timestamp', 'value', 'sensor_id'] def __init__(self, timestamp, value, sensor_id): self.timestamp = timestamp self.value = value self.sensor_id = sensor_id # Представьте, что таких объектов у вас миллионы data_points = [DataPoint(time.time(), random.random(), i) for i in range(1_000_000)] 🔎Про что стоит помнить: slots – это не волшебная таблетка. Используйте его там, где действительно важна оптимизация памяти и где вы уверены в неизменном наборе атрибутов. 🐍Pythoner
22 · 2K ·

Рядом в ленте

PPythoner🦆Duck typing — это концепция, позволяющая использовать объекты независимо от их типа, базируясь на их свойствах и методах. Основная идея — не проверять тип объеPPythoner✈️Whylogs - это библиотека для логирования и анализа данных в Python. Она предназначена для легкого отслеживания метрик данных, которые могут помочь в мониторин
это сообщение
PPythoner✈️Конструкция if __name__ == '__main__' используется для того, чтобы определить, запущен ли файл модуля напрямую или импортирован из другого модуля. ➡️Простой пPPythoner✈️Сегодня поговорим о настоящей магии в мире Python – метапрограммировании и динамическом создании функций. ➡️Начнем с простого примера. Помните eval() и exec()

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем