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
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
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?
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.