Por que a nova classe de estilo e a classe de estilo antigo têm comportamento diferente nesse caso?

Achei algo interessante, aqui está um trecho de código:

class A(object):
    def __init__(self):
        print "A init"

    def __del__(self):
        print "A del"

class B(object):
    a = A()

Se eu executar esse código, obterá:

A init

Mas se eu mudarclass B(object) paraclass B(), Eu receberei:

A init
A del

Encontrei uma nota no__del__ doc:

Não é garantido quedel() são chamados para objetos que ainda existem quando o intérprete sai.

Então, acho que é porqueB.a ainda é referenciado (referenciado pela classeB) quando o intérprete existe.

Então, eu adicionei umdel B antes que o intérprete exista manualmente, e então eu acheia.__del__() foi chamado.

Agora, estou um pouco confuso sobre isso. Porque éa.__del__() chamado ao usar a classe de estilo antigo? Por que as classes de estilo novo e antigo têm comportamento diferente?

Encontrei uma pergunta semelhanteaqui, mas acho que as respostas não são claras o suficiente.

questionAnswers(1)

yourAnswerToTheQuestion