Python-Liste sollte leer sein, auf die Klasse-Instanz-Initialisierung, aber das ist es nicht. Warum?

Möchte ich Sie zum erstellen von Instanzen einer Klasse enthält ein Liste ist standardmäßig leer; statt der später die Einstellung in dieser Liste die endgültige Liste möchte ich sukzessive Elemente hinzufügen. Hier ein Stück Beispielcode illustriert dies:

#!/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

Bei mir lief das Programm erwartet, dass ich bekommen

Anne 1 [1]

Leo 1 [2]

Suzy 1 [3]

als ich angenommen lista immer initialisiert werden, um eine leere Liste.

Was ich bekam, war vielmehr dies:

Anne 1 [1]

Leo 1 [1, 2]

Suzy 1 [1, 2, 3]

Wenn ich ersetzen self.lista = lst durch self.lista = [] es funktioniert gut, genau wie wenn ich die Zeile hinzufügen name_dict[name].lista = [] zu der for-Schleife.

Warum ist es, dass die Inhalte der bisherigen Objekte, Listen beibehalten werden, aber Ihre Werte integer nicht? Ich bin ziemlich neu in Python, also wäre es toll, wenn jemand darauf hinweisen könnte, wo mir meine Gedanken/Annahmen in die Irre gegangen.

Vielen Dank im Voraus für Ihre Antworten.

InformationsquelleAutor canavanin | 2010-12-26
Schreibe einen Kommentar