Saltar para o conteúdo principal
🔒 Modo de pré-visualização. As primeiras quinze aulas de Foundations são grátis; esta é Pro. Inicie um trial de 7 dias para desbloquear o editor, as dicas AI e o resto do programa. Cartão necessário, cancele a qualquer momento no Dashboard.Iniciar trial de 7 dias →
← CursosSenior Deep-DivesModule 4 · Memory + profiling · RecapVazamentos de memória: ciclos e referência fracapredict98 / 161
+100 XP
Tarefa
📝 **Tarefa:** Prever o resultado exato. Duas instâncias `Node` apontam uma para a outra (`a.peer = b`, `b.peer = a`) — um ciclo de refcount. `gc.disable()` interrompe o coletor de ciclo. Depois de `del a` + `del b`, a recontagem de cada um ainda é 1 (do par), então nenhum deles morre. Somente `gc.collect()` encontra e interrompe o ciclo, acionando ambos os retornos de chamada de finalização. 📋 Implemente a função acima. Os testes são executados automaticamente. 💡 **Dica:** Releia a teoria se tiver dúvidas.
Prevê a saída

Lê o código com atenção

import gc
import weakref

deaths = []


def watcher(name):
    deaths.append(name)


class Node:
    def __init__(self, name):
        self.name = name
        self.peer = None


a = Node("a")
b = Node("b")
a.peer = b
b.peer = a
weakref.finalize(a, watcher, "a")
weakref.finalize(b, watcher, "b")

gc.disable()
del a
del b
print(f"after_del:{deaths}")

gc.collect()
print(f"after_gc:{sorted(deaths)}")
gc.enable()

O que o programa vai imprimir? Escreve aqui:

💬 Discussão

Seja o primeiro a fazer uma pergunta ou compartilhar uma dica.
Faça login para entrar na discussão. A leitura é gratuita.
Carregando discussão…