Что выведет код 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 ошибок.
Ещё по теме «Память и производительность»
- Встроенные функции против ручного цикла
- Пересечение больших списков id
- Числа Фибоначчи без экспоненты
- Скользящая медиана потока на двух кучах
- Найти пару с суммой быстрее O(n²)
- Циклические ссылки и gc
- Управление памятью в CPython
- Инструменты профилирования Python