Список Python должен быть пустым на инициализация экземпляра класса, но это не так. Почему?

Я хотел бы создать экземпляры класса, содержащего пустой список по умолчанию; вместо того, чтобы позже устанавливать этот список в окончательный полный список, я хотел бы последовательно добавлять в него элементы. Вот пример кода, иллюстрирующий это:

#!/usr/bin/python

class test:
    def __init__(self, lst=[], intg=0):
        self.lista   = lst
        self.integer = intg

name_dict = {}
counter   = 0

for name in ('Anne', 'Leo', 'Suzy'):
    counter += 1

    name_dict[name] = test()
    name_dict[name].integer += 1
    name_dict[name].lista.append(counter)

    print name, name_dict[name].integer, name_dict[name].lista

Когда я запустил указанную выше программу, я ожидал получить

Anne 1 [1]
Лев 1 [2]
Suzy 1 [3]

, как я предполагал, lista всегда инициализируется пустым списком.

Вместо этого я получил следующее:

Anne 1 [1]
Лев 1 [1, 2]
Suzy 1 [1, 2, 3]

Если я заменю self.lista = lst на self.lista = [] , он будет работать нормально, точно так же, как когда я добавляю строку name_dict [name] .lista = [] в цикл for.

Почему содержимое списков предыдущих объектов сохраняется, но их значения integer не изменяются т? Я новичок в Python, поэтому было бы здорово, если бы кто-нибудь мог указать мне, где мои мысли / предположения заблудились.

Заранее большое спасибо за ваши ответы.

5
задан canavanin 26 December 2010 в 22:25
поделиться