Ich versuche, ein Python-Skript zu erstellen, das mehrere Datenbanken öffnet und deren Inhalt vergleicht. Beim Erstellen dieses Skripts bin ich auf ein Problem beim Erstellen einer Liste gestoßen, deren Inhalt Objekte sind, die ich erstellt habe.
Ich habe das Programm für diesen Beitrag auf den Punkt gebracht. Zuerst erstelle ich eine neue Klasse, erstelle eine neue Instanz davon, weise ihr ein Attribut zu und schreibe sie dann in eine Liste. Dann weise ich der Instanz einen neuen Wert zu und schreibe ihn erneut in eine Liste ... und immer wieder ...
Das Problem ist, dass es immer dasselbe Objekt ist, also ändere ich wirklich nur das Basisobjekt. Wenn ich die Liste lese, erhalte ich immer wieder die Wiederholung desselben Objekts.
Wie schreibt man Objekte in eine Liste innerhalb einer Schleife?
Hier ist mein vereinfachter Code
class SimpleClass(object):
pass
x = SimpleClass
# Then create an empty list
simpleList = []
#Then loop through from 0 to 3 adding an attribute to the instance 'x' of SimpleClass
for count in range(0,4):
# each iteration creates a slightly different attribute value, and then prints it to
# prove that step is working
# but the problem is, I'm always updating a reference to 'x' and what I want to add to
# simplelist is a new instance of x that contains the updated attribute
x.attr1= '*Bob* '* count
print "Loop Count: %s Attribute Value %s" % (count, x.attr1)
simpleList.append(x)
print '-'*20
# And here I print out each instance of the object stored in the list 'simpleList'
# and the problem surfaces. Every element of 'simpleList' contains the same attribute value
y = SimpleClass
print "Reading the attributes from the objects in the list"
for count in range(0,4):
y = simpleList[count]
print y.attr1
Wie füge ich die Elemente von simpleList hinzu (anhängen, erweitern, kopieren oder was auch immer), sodass jeder Eintrag eine andere Instanz des Objekts enthält, anstatt dass alle auf dieselbe verweisen?