¿Por qué la clase de estilo nueva y la clase de estilo antiguo tienen un comportamiento diferente en este caso?

Encontré algo interesante, aquí hay un fragmento de código:

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

    def __del__(self):
        print "A del"

class B(object):
    a = A()

Si ejecuto este código, obtendré:

A init

Pero si cambioclass B(object) aclass B(), Obtendré:

A init
A del

Encontré una nota en el__del__ doc:

No se garantiza quedel() se llaman métodos para objetos que todavía existen cuando el intérprete sale.

Entonces, supongo que es porque esoB.a todavía está referenciado (referenciado por claseB) cuando existe el intérprete.

Entonces, agregué undel B antes de que el intérprete exista manualmente, y luego encontréa.__del__() fue llamado.

Ahora, estoy un poco confundido acerca de eso. Por que esa.__del__() llamado cuando se usa la clase de estilo antiguo? ¿Por qué las clases de estilo nuevo y antiguo tienen un comportamiento diferente?

Encontré una pregunta similaraquí, pero creo que las respuestas no son lo suficientemente claras.

Respuestas a la pregunta(1)

Su respuesta a la pregunta