все Python 3weakrefпонятие
weakref.ref
слабые ссылки
Слабая ссылка: позволяет обратиться к объекту, не мешая сборщику его удалить. Вызов r() возвращает объект или None, если его уже нет.
Синтаксис
r = weakref.ref(obj, callback=None); r()
В CPython объект удаляется в момент, когда исчезает последняя обычная ссылка, — сразу после del или выхода из функции; объекты в циклических ссылках ждут сборщика gc. Слабую ссылку на int, str, list, tuple, dict создать нельзя (TypeError): у этих типов нет поля __weakref__ — ради экономии памяти. Подкласс list, dict или str её уже поддерживает, а подкласс int и tuple — нет. weakref.ReferenceType — то же самое, что weakref.ref.
Примеры
import weakref
class Node:
pass
n = Node()
r = weakref.ref(n)
print(r() is n) # → True
del n
print(r()) # → None
import weakref
class MyList(list):
pass
print(weakref.ref(MyList()) is not None) # → True
try:
weakref.ref([1, 2])
except TypeError:
print('TypeError') # → TypeError
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности