Python Glossary English

все Python 3weakrefпонятие

weakref.WeakValueDictionary

слабые коллекции

Словарь со слабыми значениями: запись исчезает, когда объект-значение удалён. Основа кэша, который не удерживает объекты в памяти сам.

Синтаксис

d = weakref.WeakValueDictionary()

Ловушка новичка: d['k'] = Obj() — запись пропадает тут же, потому что на новый объект больше никто не ссылается. Такой кэш хранит объект ровно до тех пор, пока он нужен кому-то ещё. Значения тоже должны поддерживать слабые ссылки: числа, строки и списки положить нельзя. Если нужно держать последние N объектов независимо от использования — это functools.lru_cache, а не этот словарь.

Примеры

import weakref
class Image:
    pass
cache = weakref.WeakValueDictionary()
cache['tmp'] = Image()
print('tmp' in cache)  # → False
img = Image()
cache['logo'] = img
print('logo' in cache)  # → True
del img
print('logo' in cache)  # → False

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности