Найти в Дзене

39. Опишите принцип работы сборщика мусора в Python


В Python имеется встроенный механизм управления памятью, реализующий сборщик мусора (garbage collector ).

Сборщик мусора периодически запускается и подсчитывает ссылки на объекты.
Если ссылок нет, память можно освобождать. Это просто и эффективно, но есть один недостаток - определеление циклических ссылок. Для этого существует дополнительный сборщик, generational garbage collection, который следит за объектами с циклическими ссылками.

В Python встроен модуль gc, благодаря которому можно осуществить управление или слежение за сборкой мусора. (https://docs.python.org/3/library/gc.html)

Дополнительно упомяну каверзный вопрос: что делать, чтобы избежать циклических ссылок в своём коде? Правильный ответ - писать нормальный код. Ожидаемый ответ - использовать модуль weakref (https://docs.python.org/3/library/weakref.html#module-weakref)

p.s. Количество ссылок на ваш объект можно узнать так:

import sys
sys.getrefcount(some_object)

#сериал101, #39
Около минуты