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