Сообщить об ошибке.

Классы WeakKeyDictionary() и WeakValueDictionary() модуля weakref в Python

Слабая ссылка на ключи или значения словаря dict

Синтаксис:

import weakref

weakref.WeakKeyDictionary([dict])
weakref.WeakValueDictionary([dict])

Параметры:

Возвращаемое значение:

  • словарь, который слабо ссылается на ключи.

Описание:

weakref.WeakKeyDictionary.

Класс weakref.WeakKeyDictionary() представляет собой словарь, который слабо ссылается на ключи. Записи в словаре будут отброшены, если нет более сильной ссылки на ключ.

Такое поведение можно использовать для связывания дополнительных данных с объектом, принадлежащим другим частям приложения, без добавления атрибутов к этим объектам. Это может быть особенно полезно с объектами, которые отменяют доступ к атрибутам.

Внимание: поскольку weakref.WeakKeyDictionary() построен поверх словаря Python, он не должен изменять размер при итерации по нему. Это может быть трудно обеспечить для WeakKeyDictionary, поскольку действия, выполняемые программой во время итерации, могут приводить к тому, что элементы в словаре будут исчезать как "по волшебству". Это побочный эффект сборки мусора.

У объектов WeakKeyDictionary есть дополнительный метод, который напрямую предоставляет внутренние ссылки. Не гарантируется, что ссылки будут "живыми" во время их использования, поэтому перед вызовом необходимо проверить результат вызова ссылок. Это можно использовать, чтобы избежать создания ссылок, из-за которых сборщик мусора будет хранить ключи дольше, чем необходимо.

  • Метод WeakKeyDictionary.keyrefs() - возвращает итерацию слабых ссылок на ключи.

weakref.WeakValueDictionary.

Класс weakref.WeakValueDictionary() представляет собой словарь, который слабо ссылается на значения. Записи в словаре будут отброшены, если нет более сильной ссылки на значение.

Внимание: поскольку weakref.WeakValueDictionary() построен поверх словаря Python, он не должен изменять размер при итерации по нему. Это может быть трудно обеспечить для WeakValueDictionary, поскольку действия, выполняемые программой во время итерации, могут приводить к тому, что элементы в словаре будут исчезать как "по волшебству". Это побочный эффект сборки мусора.

У объектов WeakValueDictionary есть дополнительный метод, который имеет те же проблемы, что и метод WeakKeyDictionary.keyrefs().

  • Метод WeakValueDictionary.valuerefs() - возвращает итерацию слабых ссылок на значения.

Примеры:

Этот простой пример показывает, как приложение может использовать идентификаторы объектов id() для извлечения объектов, которые оно использовало ранее. Идентификаторы объектов затем могут использоваться в других структурах данных, не заставляя объекты оставаться живыми, но в этом случае они все равно могут быть извлечены с помощью идентификатора.

import weakref

_id2obj_dict = weakref.WeakValueDictionary()

def remember(obj):
    oid = id(obj)
    _id2obj_dict[oid] = obj
    return oid

def id2obj(oid):
    return _id2obj_dict[oid]