🏗 Управление памятью в Python: как это работает
Python сам выделяет и очищает память, чтобы вы не думали о байтах и указателях. Но иногда автоматике стоит помочь.
1. Python управляет памятью автоматически
Когда вы пишете
▪️ Тип данных (int, list, dict)
▪️ Счетчик ссылок (кто использует объект)
▪️ Значение (сами данные)
Такой подход удобен: нет «висячих указателей», не нужно вручную вызывать
2. Счетчик ссылок
Каждый объект в Python — как воздушный шарик. Пока его кто-то держит (есть ссылки), он остается. Если все нити отпущены — объект исчезает.
Как это работает:
💡Но есть нюансы: Python кэширует строки и мелкие числа (-5 до 256), поэтому их ссылки могут не изменяться.
3. Сборщик мусора
Если объекты ссылаются друг на друга, счетчик ссылок их не удалит. Например:
Такие объекты удаляет сборщик мусора (Garbage Collector, GC), используя алгоритм поколений:
🍼 Поколение 0 — новые объекты, проверяются чаще.
🧑💼 Поколение 1 — пережили одну проверку.
🦖 Поколение 2 — «старожилы», проверяются реже.
Управление GC:
💡 Совет: если у вас много циклических объектов, очищайте их вручную (gc.collect()).
4. Как оптимизировать память вручную
🔸 slots для уменьшения потребления памяти:
🔸 Генераторы вместо списков:
🔸 Массивы вместо списков:
🔸 Кэширование с lru_cache:
5. Как искать утечки памяти
🔸 Используем tracemalloc — показывает, где «утекает» память:
🔸 Визуализация с objgraph — рисует граф зависимостей:
📌 Подробнее про управление памятью в Python: https://clc.to/SNaUtg
Библиотека питониста #буст
Python сам выделяет и очищает память, чтобы вы не думали о байтах и указателях. Но иногда автоматике стоит помочь.
1. Python управляет памятью автоматически
Когда вы пишете
x = [1, 2, 3]
, Python не заставляет вас думать о байтах и указателях. Он сам выделяет память, отслеживает объекты и убирает мусор. Всё это делает менеджер памяти, который хранит: ▪️ Тип данных (int, list, dict)
▪️ Счетчик ссылок (кто использует объект)
▪️ Значение (сами данные)
Такой подход удобен: нет «висячих указателей», не нужно вручную вызывать
malloc/free
, а ресурсы оптимизируются автоматически. 2. Счетчик ссылок
Каждый объект в Python — как воздушный шарик. Пока его кто-то держит (есть ссылки), он остается. Если все нити отпущены — объект исчезает.
Как это работает:
import sys
a = [1, 2, 3]
print(sys.getrefcount(a)) # 2 (одна ссылка в переменной + вызов функции)
b = a
print(sys.getrefcount(a)) # 3 (еще одна ссылка)
del a
print(sys.getrefcount(b)) # 2 (одна ссылка удалена)
b = None # Объект больше не используется → удален
💡Но есть нюансы: Python кэширует строки и мелкие числа (-5 до 256), поэтому их ссылки могут не изменяться.
3. Сборщик мусора
Если объекты ссылаются друг на друга, счетчик ссылок их не удалит. Например:
class Node:
def __init__(self):
self.parent = None
a = Node()
b = Node()
a.parent = b
b.parent = a # Циклическая ссылка!
Такие объекты удаляет сборщик мусора (Garbage Collector, GC), используя алгоритм поколений:
🍼 Поколение 0 — новые объекты, проверяются чаще.
🧑💼 Поколение 1 — пережили одну проверку.
🦖 Поколение 2 — «старожилы», проверяются реже.
Управление GC:
import gc
gc.collect() # Принудительный запуск
gc.set_threshold(700, 10, 10) # Настройка частоты очистки
💡 Совет: если у вас много циклических объектов, очищайте их вручную (gc.collect()).
4. Как оптимизировать память вручную
🔸 slots для уменьшения потребления памяти:
class User:
slots = ['name', 'age'] # Экономит до 40% памяти
def __init__(self, name, age):
self.name = name
self.age = age
🔸 Генераторы вместо списков:
# Неоптимально:
lines = open("data.txt").readlines() #Весь файл в памяти!
# Оптимально:
def read_lines(filename):
with open(filename) as f:
for line in f:
yield line # Читаем по одной строке
🔸 Массивы вместо списков:
import array
numbers = array.array('i', [1, 2, 3, 4, 5]) # Числовой массив (экономия памяти)
🔸 Кэширование с lru_cache:
from functools import lru_cache
@lru_cache(maxsize=1000)
def compute(x):
return x 2 # Кэширует результаты функции
5. Как искать утечки памяти
🔸 Используем tracemalloc — показывает, где «утекает» память:
import tracemalloc
tracemalloc.start()
data = [x for x in range(10_000)] # Проблемный код
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
print(top_stats[0]) # Где выделена память?
🔸 Визуализация с objgraph — рисует граф зависимостей:
import objgraph
objgraph.show_most_common_types(limit=5) # Какие объекты «размножаются»?
📌 Подробнее про управление памятью в Python: https://clc.to/SNaUtg
Библиотека питониста #буст
👍25❤4❤🔥1
Готовишься к интервью? Мы собрали 10 каверзных вопросов, которые любят задавать тимлиды. Здесь нет банальных задач — только те, на которых спотыкаются 80% кандидатов. Проверь себя и узнай, готов ли ты к следующему собесу!
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🔥1
Forwarded from Библиотека шарписта | C#, F#, .NET, ASP.NET
💾 Как выбрать стратегию кэширования: разбор 7 популярных алгоритмов
Кешировать нужно с умом. И нет, LRU — не серебряная пуля.
В статье вас ждёт разбор алгоритмов: LRU, LFU, FIFO и другие
– Примеры, где каждый работает лучше
– Плюсы и минусы подходов
– Практические советы по выбору стратегии
Если проектируете систему с большими нагрузками или оптимизируете производительность — материал будет как раз.
➡️ Читать статью
🐸 Библиотека шарписта
Кешировать нужно с умом. И нет, LRU — не серебряная пуля.
В статье вас ждёт разбор алгоритмов: LRU, LFU, FIFO и другие
– Примеры, где каждый работает лучше
– Плюсы и минусы подходов
– Практические советы по выбору стратегии
Если проектируете систему с большими нагрузками или оптимизируете производительность — материал будет как раз.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
reloading — это удобный инструмент для Python, который позволяет автоматически перезагружать тело цикла или функцию из исходного кода на каждой итерации, не теряя состояние.
🔹 Когда полезно?
— При обучении нейросетей, когда нужно изменять код на лету без остановки процесса.
— Для добавления логов, сохранения модели, изменения статистики во время работы.
— В других сценариях, где требуется динамическое обновление кода.
Установка:
pip install reloading
🔹Как использовать?
Перезагрузка тела цикла перед каждой итерацией:
from reloading import reloading
for i in reloading(range(10)):
# этот код будет обновляться перед каждой итерацией
print(i)
Перезагрузка функции перед каждым вызовом:
from reloading import reloading
@reloading
def some_function():
# этот код будет обновляться перед каждым вызовом
pass
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2❤🔥1
🎧 Что послушать: обнаружение выбросов в данных с Python
В свежем выпуске Talk Python to Me обсуждают, как находить аномальные данные и использовать их для обнаружения мошенничества, неожиданных закономерностей и научных открытий.
Темы выпуска:
🎙️ Почему выбросы важны? Ошибки, инсайты и скрытые паттерны
🎙️ Методы обнаружения выбросов и их отличие от предсказания и кластеризации
🎙️ Практические кейсы и новые исследования
Если хотите научиться замечать аномалии и использовать их в своих проектах — этот выпуск для вас!
🔗 Слушать подкаст: https://clc.to/S3qK4Q
Библиотека питониста #буст
В свежем выпуске Talk Python to Me обсуждают, как находить аномальные данные и использовать их для обнаружения мошенничества, неожиданных закономерностей и научных открытий.
Темы выпуска:
🎙️ Почему выбросы важны? Ошибки, инсайты и скрытые паттерны
🎙️ Методы обнаружения выбросов и их отличие от предсказания и кластеризации
🎙️ Практические кейсы и новые исследования
Если хотите научиться замечать аномалии и использовать их в своих проектах — этот выпуск для вас!
🔗 Слушать подкаст: https://clc.to/S3qK4Q
Библиотека питониста #буст
❤2👍2
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
☸️ CKAD 2025. Самый свежий гайд по сдаче сертификации Certified Kubernetes Application Developer
CKAD стал более строгим к деталям — без системной подготовки можно завалить даже на банальных заданиях. Если хочется разобраться, что важно для получения сертификации — эта статья сэкономит часы.
➡️ Читать статью
🐸 Библиотека devops'a
CKAD стал более строгим к деталям — без системной подготовки можно завалить даже на банальных заданиях. Если хочется разобраться, что важно для получения сертификации — эта статья сэкономит часы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤🔥1❤1
Forwarded from Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
🤖 IT-выживание 2025: как не вылететь с рынка труда в эпоху LLM
В 2025-м айтишникам приходится несладко: старые скиллы уже не в цене, LLM наступают на пятки, а работодатели хотят все и сразу.
👍 Делимся инсайдами, как выжить в новой реальности и не потерять работу в эпоху тотальной оптимизации.
👉 Ссылка на статью: https://proglib.io/sh/zEruLHxYno
Библиотека дата-сайентиста
В 2025-м айтишникам приходится несладко: старые скиллы уже не в цене, LLM наступают на пятки, а работодатели хотят все и сразу.
👍 Делимся инсайдами, как выжить в новой реальности и не потерять работу в эпоху тотальной оптимизации.
👉 Ссылка на статью: https://proglib.io/sh/zEruLHxYno
Библиотека дата-сайентиста
👾4❤🔥2👍2🙏1💯1
🤓 Вопросы подписчиков: как перейти от Jupyter Notebooks к продакшн-коду?
Сегодня мы делимся вопросом от подписчика, который учился и разрабатывал проекты в Anaconda Notebooks, но стремится выйти на новый уровень и освоить написание продакшн-кода на Python.
💬 Он пишет:
✌️ Делитесь своими советами в комментариях!
P.S. Если хотите задать вопрос, заполните нашу гугл-форму. Это займет 5 минут.
Библиотека питониста #междусобойчик
Сегодня мы делимся вопросом от подписчика, который учился и разрабатывал проекты в Anaconda Notebooks, но стремится выйти на новый уровень и освоить написание продакшн-кода на Python.
Я начинал учиться и программировать в Anaconda Notebooks — это отличный инструмент для учебы и исследований. Однако в индустрии подход к коду совсем другой. Там он структурирован: используются субпапки, главный .py-файл объединяет всё, а развертывание, API и тесты разнесены по отдельным директориям. Это как готовое здание с надежным фундаментом и продуманной структурой, где все части взаимосвязаны.
Если вы работаете с Python в индустрии, не могли бы вы посоветовать, как перейти от стиля работы в ноутбуках к созданию продакшн-кода?
P.S. Если хотите задать вопрос, заполните нашу гугл-форму. Это займет 5 минут.
Библиотека питониста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤2👍2😁1🤔1
Модуль
functools
в Python содержит полезный инструмент — ctools,
который позволяет создавать новые функции, фиксируя часть аргументов уже существующей функции. Это называется частичное применение функций.🔹 Как это работает?
С помощью
partial
можно «заморозить» часть аргументов, чтобы создать новую функцию с меньшим числом входных параметров.📌 Пример: фиксируем аргумент
from functools import partial
def multiply(x, y):
return x * y
double = partial(multiply, 2) # "Фиксируем" x как 2
print(double(5)) # Вывод: 10 (2 * 5)
Теперь
double(5)
эквивалентно multiply(2, 5)
, потому что 2
уже зафиксировано.📌 Пример: фиксируем именованные аргументы
def greet(name, greeting="Hello"):
return f"{greeting}, {name}!"
say_hi = partial(greet, greeting="Hi")
print(say_hi("Alice")) # Вывод: Hi, Alice!
Теперь
say_hi("Alice")
всегда будет использовать "Hi"
в качестве приветствия.🔹 Зачем использовать
partial
?— Упрощает код и уменьшает дублирование.
— Делает функции удобнее для повторного использования.
— Полезен в обработчиках событий и коллбэках.
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤3🔥2
🚀 Открыт прием заявок на Google Summer of Code 2025
С 2005 года эта программа помогает студентам и начинающим разработчикам погрузиться в реальный мир программирования, работая над крутыми проектами.
📅 Дедлайн подачи заявок: 8 апреля 2025 года.
📍 Подробности и форма заявки: https://clc.to/6wAHEg
Библиотека питониста #свежак
С 2005 года эта программа помогает студентам и начинающим разработчикам погрузиться в реальный мир программирования, работая над крутыми проектами.
📅 Дедлайн подачи заявок: 8 апреля 2025 года.
📍 Подробности и форма заявки: https://clc.to/6wAHEg
Библиотека питониста #свежак
❤2👍2🎉2
Зимний режим OFF. Весна начинается с апгрейда.
Если чувствуешь, что за зиму навыки подзастыли — пора их разморозить.
📦 Включили весеннюю распродажу: скидка –35% на курсы до конца марта.
Выбирай направление и выходи из спячки:
— Алгоритмы и структуры данных — чтобы собеседования в Яндекс, Ozon и другие были как уровень easy
— Математика для Data Science — для тех, кто не хочет просто «жать на кнопки», а понимать, что под капотом
— Архитектуры и шаблоны — если хочется мыслить как senior и прокачать системное мышление
— Python, Frontend, основы IT — для тех, кто стартует путь в разработке
👾 Proglib Academy — это как старая добрая 8-битная игра, но вместо врагов — практические задачи и собеседования.
Мы просто упаковали сложное обучение в пиксельную обёртку, чтобы тебе было чуть веселее прокачиваться.
🧠 Отогревай мозги, прокачивай скиллы и хватай свой power-up до конца марта.
👉 Выбрать курс
Если чувствуешь, что за зиму навыки подзастыли — пора их разморозить.
📦 Включили весеннюю распродажу: скидка –35% на курсы до конца марта.
Выбирай направление и выходи из спячки:
— Алгоритмы и структуры данных — чтобы собеседования в Яндекс, Ozon и другие были как уровень easy
— Математика для Data Science — для тех, кто не хочет просто «жать на кнопки», а понимать, что под капотом
— Архитектуры и шаблоны — если хочется мыслить как senior и прокачать системное мышление
— Python, Frontend, основы IT — для тех, кто стартует путь в разработке
👾 Proglib Academy — это как старая добрая 8-битная игра, но вместо врагов — практические задачи и собеседования.
Мы просто упаковали сложное обучение в пиксельную обёртку, чтобы тебе было чуть веселее прокачиваться.
🧠 Отогревай мозги, прокачивай скиллы и хватай свой power-up до конца марта.
👉 Выбрать курс
❤2👍2
Forwarded from Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
🥇 Прокачай Power BI: создаем bullet-chart для наглядного сравнения данных
🎯 Устали от вопросов типа «Ну и что это значит для бизнеса?» после презентации отчетов?
Bullet-chart — мощный инструмент, который сразу показывает, насколько фактические показатели соответствуют целевым. В этой статье разберем, как правильно читать такой график и шаг за шагом создадим его в Power BI.
Готовы визуализировать данные так, чтобы они говорили сами за себя?
👍 Тогда поехали, ссылка на статью: https://proglib.io/sh/hcrRdAuqT5
Библиотека дата-сайентиста
🎯 Устали от вопросов типа «Ну и что это значит для бизнеса?» после презентации отчетов?
Bullet-chart — мощный инструмент, который сразу показывает, насколько фактические показатели соответствуют целевым. В этой статье разберем, как правильно читать такой график и шаг за шагом создадим его в Power BI.
Готовы визуализировать данные так, чтобы они говорили сами за себя?
👍 Тогда поехали, ссылка на статью: https://proglib.io/sh/hcrRdAuqT5
Библиотека дата-сайентиста
❤4👍2🎉1
Python — гибкий язык, и писать на нём можно в разных парадигмах. Но что удобнее, понятнее и «правильнее»?
class NumberProcessor:
def __init__(self, numbers):
self.numbers = numbers
def filter_even(self):
self.numbers = [n for n in self.numbers if n % 2 == 0]
return self
def square(self):
self.numbers = [n**2 for n in self.numbers]
return self
def get_result(self):
return self.numbers
processor = NumberProcessor([1, 2, 3, 4, 5, 6])
result = processor.filter_even().square().get_result()
print(result) # [4, 16, 36]
from functools import reduce
def filter_even(numbers):
return list(filter(lambda x: x % 2 == 0, numbers))
def square(numbers):
return list(map(lambda x: x**2, numbers))
numbers = [1, 2, 3, 4, 5, 6]
result = square(filter_even(numbers))
print(result) # [4, 16, 36]
numbers = [1, 2, 3, 4, 5, 6]
result = [n**2 for n in numbers if n % 2 == 0]
print(result) # [4, 16, 36]
Какой стиль ближе? Выбирайте свой лагерь и аргументируйте в комментах! 👇
👍 ООП — потому что читаемо и поддерживаемо
❤️ Функциональный стиль — минимум багов и максимум эффективности
🔥 Скрипты — зачем усложнять, если можно просто?
Библиотека питониста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤43👍29🔥15🥰2👏1
🚀 Релизы и инструменты:
— IPython 9— новые возможности интерактивной оболочки
— Mesop 1.0 — новый UI-фреймворк на Python для веб-приложений
— Flet — фреймворк для кроссплатформенных мобильных и десктопных приложений
🔬 Глубже в Python:
— Removing deprecated config format? Что может пойти не так? — удаление устаревших конфигураций в setuptools вызвало проблемы (но уже откатили)
— Django Template Components — новый подход к компонентам в Django
— Smoke-тестирование Django Admin — защита от неожиданных ошибок
📚 Обучение и лучшие практики:
— Как уменьшить размер Docker-образа на 80%
— Poetry, Rye или UV? — что выбрать для управления зависимостями
— Как построить Hot Module Replacement в Python — обновляем код без перезапуска
📢 Анонсы и события:
— Google Summer of Code 2025 — открыт приём заявок
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
Хотите писать чистый и поддерживаемый код? Давайте разберем, чем отличаются эти три типа методов в Python.
🔹 Методы экземпляра (`self`):
✓ Работают с конкретным объектом
✓ Изменяют атрибуты экземпляра
✓ Доступ к атрибутам класса через
self.__class__
class MyClass:
def method(self):
return "Метод экземпляра", self
🔹 Методы класса (`cls`, `@classmethod`):
✓ Работают с классом в целом
✓ Могут изменять атрибуты класса
✓ Не изменяют атрибуты экземпляра
class MyClass:
@classmethod
def class_method(cls):
return "Метод класса", cls
🔹 Статические методы (`@staticmethod`):
✓ Не принимают self или cls
✓ Не изменяют состояние ни экземпляра, ни класса
✓ Используются для вспомогательных функций
class MyClass:
@staticmethod
def static_method():
return "Статический метод"
🔹 Применение в реальном коде:
class Pizza:
def __init__(self, ingredients):
self.ingredients = ingredients
@classmethod
def margherita(cls):
return cls(["моцарелла", "помидоры"])
@staticmethod
def circle_area(r):
import math
return r ** 2 * math.pi
pizza = Pizza.margherita() # Классовый метод
print(Pizza.circle_area(4)) # Статический метод
🔹 Вывод:
✓ Методы экземпляра изменяют данные конкретного объекта
✓ Методы класса работают с классом и создают альтернативные конструкторы
✓ Статические методы полезны для утилитарных функций
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2😁1👾1
Пора сыграть в любимую всеми игру: что делает этот код?
def foo():
try:
return os._exit()
finally:
return False
import os
foo()
Что он делает:
🔥 — возвращает
None
❤️ — возвращает
False
👍 — выбрасывает исключение
⚡️ — завершает процесс без вывода чего-либо
Объясните свои ответы в комментариях.
Ответ:
Возвращает False. Хотите знать почему? 🟢 Обычно os._exit завершает процесс без выполнения «обработчиков очистки» (блоков finally). Однако ему нужен один аргумент. Этот фрагмент кода забывает передать код выхода, поэтому вместо завершения процесса он выбрасывает TypeError. Затем блок finally тихо подавляет исключение из-за return. 🟢 Возврат из блока finally на самом деле так часто используется неправильно, что разработчики Python планируют сделать так, чтобы в будущем выпуске это вызывало SyntaxWarning. 🟢 Можно было бы подумать, что import os идёт после определения функции. Но в Python используется динамическая область видимости, так что это нормально. 🟢 Также можно перепутать sys.exit с os._exit. sys.exit работает, выбрасывая исключение SystemExit, которое было бы перехвачено и подавлено блоком finally. Но _exit напрямую завершает процесс:
-> Завершает процесс с кодом состояния n, не вызывая обработчики очистки, не сбрасывая буферы stdio и т.д.
🔗 Оригинал статьи: https://clc.to/uL6PfA
Библиотека питониста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23👍15⚡7🔥2😢1
📅 Важные релизы:
• Python 3.14 alpha 7 — ожидается 8 апреля 2025 года. Предварительный релиз для тестирования, не предназначен для продакшн-сред.
• Python 3.12.9 — последний багфикс-релиз перед окончанием активной поддержки 2 апреля 2025 года. Далее только обновления безопасности.
• Python 3.13.3 — предполагаемый релиз с исправлениями ошибок, приблизительная дата апрель 2025 года.
• Django 5.2 — ожидается финальный релиз в апреле 2025 года. Вероятно, получит статус LTS.
🌟 Ключевые мероприятия:
• PyCon DE & PyData 2025 — состоится в Дармштадте, Германия, 23-25 апреля.
• DjangoCon Europe 2025 — пройдет в Дублине, Ирландия, 23-27 апреля. Главное событие для всех, кто работает с Django.
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
🎭 Dev Memes: 1 апреля, а баги всё те же
Сегодня день официально разрешённого троллинга — и мы не могли пройти мимо. Собрали подборку мемов для Go-разработчика, которые вызывают лёгкое желание уволиться.
👉 Всё это — из нашего мемного канала «Библиотека IT-мемов»
Библиотека питониста
Сегодня день официально разрешённого троллинга — и мы не могли пройти мимо. Собрали подборку мемов для Go-разработчика, которые вызывают лёгкое желание уволиться.
👉 Всё это — из нашего мемного канала «Библиотека IT-мемов»
Библиотека питониста
😁13👍2🔥2❤1