Когда использовать слабые ссылки в Python?

Кто-либо может объяснить использование слабых ссылок?

Документация не объясняет это точно, это просто говорит, что GC может уничтожить объект, связанный с через слабую ссылку в любое время. Затем какой смысл того, чтобы иметь объект, который может исчезнуть когда-либо? Что, если я должен использовать его прямо после того, как это исчезло?

Можно ли объяснить их с некоторыми хорошими примерами?

Спасибо

35
задан eLRuLL 15 May 2015 в 16:58
поделиться

1 ответ

Обычно слабые ссылки используются, если A имеет ссылку на B, а B имеет ссылку на A. Без надлежащего сборщика мусора, определяющего цикл, эти два объекта никогда не будут GC, даже если нет ссылок на либо "извне". Однако, если одна из ссылок «слабая», объекты будут правильно обработаны сборкой мусора.

Однако в Python есть сборщик мусора, определяющий цикл (начиная с версии 2.0!), Так что это не считается :)

Еще одно применение слабых ссылок - для кешей. Это упоминается в документации weakref :

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

Если сборщик мусора решает уничтожить один из этих объектов, а он вам нужен, вы можете просто пересчитать / повторно получить данные.

25
ответ дан 27 November 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: