__del__-Methode wird in Python aufgerufen, wenn dies nicht erwartet wird

Ich bin neu in Python und habe die Beispiele in Swaroop CHs "A Byte of Python" durchgearbeitet. Ich sehe ein Verhalten mit dem__del__ Methode, die mich verwirrt.

Grundsätzlich, wenn ich das folgende Skript ausführe (in Python 2.6.2)

class Person4:
    '''Represents a person'''
    population = 0

    def __init__(self, name):
        '''Initialize the person's data'''
        self.name = name
        print 'Initializing %s'% self.name

        #When the person is created they increase the population
        Person4.population += 1

    def __del__(self):
        '''I am dying'''
        print '%s says bye' % self.name

        Person4.population -= 1

        if Person4.population == 0:
            print 'I am the last one'
        else:
            print 'There are still %d left' % Person4.population


swaroop = Person4('Swaroop')
kaleem = Person4('Kalem')

Wenn ich die Python-Konsole (oder die interaktive Spyder-Konsole) verwende, sehe ich Folgendes:

execfile (u'C: \ 1_eric \ Python \ test1.py ')
Initialisierung von Swaroop
Kalem wird initialisiert

execfile (u'C: \ 1_eric \ Python \ test1.py ')
Initialisierung von Swaroop
Swaroop sagt Tschüss
Ich bin der letzte
Kalem wird initialisiert
Kalem sagt Tschüss
Ich bin der letzte

Warum ist der__del__ Methode, die unmittelbar nach dem aufgerufen wird__init__ im zweiten Lauf?
Ich vermute, da die gleichen Instanznamen ('swaroop' und 'kaleem') verwendet werden, gibt es die ursprüngliche Instanz frei und sammelt sie als Müll. Dies scheint jedoch ein Chaos mit der aktuellen Bevölkerungszahl zu sein.

Was geht hier vor sich?
Was ist ein guter Weg, um diese Art von Verwirrung zu vermeiden?
Vermeiden Sie die Verwendung von__del__? Überprüfen Sie, ob Instanznamen vorhanden sind, bevor Sie sie wiederverwenden. ...

Danke, Eric

Antworten auf die Frage(2)

Ihre Antwort auf die Frage