Back to questions
Middle
7
Как работает garbage collector в Python? Если ячейка памяти ссылается на другую ячейку памяти — удалит ли GC обе ссылки или ничего не удалит?
Companies where asked
sber tech
Answer from AI
sobes.tech AI
В Python сборщик мусора (garbage collector, GC) работает на основе подсчёта ссылок и дополнительно использует алгоритм обнаружения циклических ссылок.
- Каждый объект хранит счётчик ссылок — количество активных ссылок на него.
- Когда счётчик становится 0, объект сразу удаляется.
- Однако, если объекты ссылаются друг на друга циклично, но не доступны из программы, счётчики не становятся 0.
- Для таких случаев Python запускает циклический сборщик, который ищет и удаляет циклы объектов, недоступных из кода.
Если ячейка памяти (объект) ссылается на другую, GC не удалит обе, если на них ещё есть внешние ссылки. Если же обе связаны циклом и недоступны, то циклический GC удалит весь цикл целиком.
Пример:
import gc
a = []
b = [a]
a.append(b)
# a и b ссылаются друг на друга, создавая цикл
# Если удалить внешние ссылки:
del a
# b всё ещё существует
del b
# Теперь цикл недоступен, GC может его собрать
gc.collect()