Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

O acontece quando referência recebe o valor None?

Quando nós atribuimo o valor None à uma referência de um objeto, o que acontece? A referência passa a apontar para nulo ou também o objeto na memória é destruído automaticamente? Exemplo:

ref = MinhaClasse()
ref = None
4 respostas

Ambos, sua refêrencia estára apontando para nulo, e o objeto eventualmente será desalocado, visto que o Python possui garbage collector

Entendi Júlio, mas isto é feito instataneamente na referência, quando eu atribuo None? Ou terá que esperar o garbage collector fazer uma inspeção geral?

solução!

Tem que esperar o garbage collector. Tem esse artigo que eu li sobre o assunto que achei interessante: https://towardsdatascience.com/memory-management-and-garbage-collection-in-python-c1cb51d1612c

Oi @Julio Cesar Schneider Martins, muito obrigado pelo artigo, ele é muito bom!

Pelo que entendi do artigo, cada objeto tem count, para dizer quantas referências existe para ele. Quando este count chega a zero, ou seja, todas referências para o objeto recebem None, imediatamente o garbage collection trabalha. Lembrando que o None em si é um objeto e, para testar esta hipótese, basta fazer o código a seguir, verificando que None tem id de objeto:

a = None
print(id(a))

Output: 93963489289056

Existe o caso em que o garbage collection não funciona, quando há uma reference cycle, ou seja, quando uma referência aponta para si mesma, fazendo um ciclo, como:

l = []
l.append(9)
l.append(l)
print(l)

Output: [9, [...]]

Neste caso acima, para destruir referência com reference cycle, existe um segundo de tipo de coletor chamado generational garbage collection.