Python Glossary English

все 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Сообщить о неточности