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-weakre...)
p.s. Количество ссылок на ваш объект можно узнать так:
import sys
sys.getrefcount(some_object)
#сериал101, #39
Это кросспост из моего Telegram-канала "Не Ван Россум", где я прямо сейчас пишу сериал "101 вопрос про Python" с описанием подводных камней, неочевидностей и загвоздок.