Метод __del__ вызывается в Python, когда он не ожидается

Я новичок в Python и работаю с примерами в Swaroop CH "Байт Питона ", Я вижу некоторое поведение с__del__ метод, который озадачивает меня.

В основном, если я запускаю следующий скрипт (в 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')

с помощью консоли Python (или интерактивной консоли Spyder) я вижу следующее:

ExecFile (U»C: \ 1_eric \ Python \ test1.py ')

Инициализация Swaroop

Инициализация Калем

ExecFile (U»C: \ 1_eric \ Python \ test1.py ')

Инициализация Swaroop

Swaroop говорит пока

Я последний

Инициализация Калем

Калем говорит пока

Я последний

Почему__del__ метод вызывается сразу после__init__ во второй раз?

Я предполагаю, что так как имена тех же экземпляров ('Swaroop» а также 'Калима») используются для освобождения исходного экземпляра и сбора мусора. Но, похоже, это наносит ущерб текущему количеству населения.

Что здесь происходит?

Что является хорошим способом избежать такого рода путаницы?

Избегайте использования__del__? Проверить существующие имена экземпляров перед их повторным использованием? ...

Спасибо эрик

Ответы на вопрос(2)

Ваш ответ на вопрос