Python weakref
Existe um módulo bem interessante na biblioteca padrão do Python que eu não conhecia até pouco tempo atrás, o weakref. Ele serve pra manter uma “referência fraca” para um objeto. Mas o que seria isso? Uma weak reference não é suficiente para manter o objeto na memória, então se só existir esse tipo de referência para o objeto, o coletor de lixo vai destruí-lo.
Isso é interessante pra evitar um alto consumo de memória com objetos muito grandes que não deveriam mais estar vivos. Um problema que pode acontecer usando o padrão de projeto Observer (mal implementado), por exemplo .
Um exemplo
r
é uma referência fraca para o objeto a
Já existem classes úteis que usam weak references: WeakKeyDictionary e WeakValueDictionary. Vale a pena dar uma olhada na documentação: