Что выведет код Senior Память и производительность обновлено

Слабая ссылка после удаления объекта

Вопрос

Что выведет код? По строке на каждый print.

import weakref

class Node:
    pass

n = Node()
r = weakref.ref(n)
print(r() is n)
del n
print(r())

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: True, None. Слабая ссылка не увеличивает счётчик ссылок.

Что выведет

True
None

Разбор

Слабая ссылка не увеличивает счётчик ссылок. Пока объект жив, вызов r() возвращает его. После del n других ссылок нет, объект освобождён, и r() возвращает None.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.