Вопрос проверяет понимание механизмов управления памятью в Python, включая счетчик ссылок и сборщик мусора.
Python использует счетчик ссылок для отслеживания использования объектов и сборщик мусора для удаления циклических ссылок. Счетчик ссылок автоматически освобождает память при достижении нуля, а сборщик мусора обрабатывает циклические зависимости.
Система управления памятью в Python состоит из двух основных компонентов: счетчика ссылок и сборщика мусора.
Счетчик ссылок:
Каждый объект хранит счетчик количества ссылок на себя
При создании ссылки счетчик увеличивается
При удалении ссылки счетчик уменьшается
Когда счетчик достигает 0, память освобождается
Пример работы счетчика ссылок:
import sys
a = [] # Счетчик: 1
b = a # Счетчик: 2
c = b # Счетчик: 3
del a # Счетчик: 2
del b # Счетчик: 1
del c # Счетчик: 0 - память освобождаетсяСборщик мусора:
Обнаруживает и удаляет циклические ссылки
Работает на алгоритме поколений (generations)
Запускается автоматически при превышении порогов
Пример циклической ссылки:
class Node:
def __init__(self):
self.ref = None
a = Node()
b = Node()
a.ref = b # Ссылка на b
b.ref = a # Циклическая ссылка на a
# Даже после удаления переменных счетчик ссылок не обнулится
# Здесь вступает сборщик мусора