Próbuję stworzyć skrypt w Pythonie, który otwiera kilka baz danych i porównuje ich zawartość. Podczas tworzenia tego skryptu napotkałem problem podczas tworzenia listy zawierającej obiekty, które utworzyłem.
Uprościłem program do jego podstawowych kości na potrzeby tego posta. Najpierw tworzę nową klasę, tworzę jej nową instancję, przypisuję jej atrybut, a potem zapisuję na liście. Następnie przypisuję instancji nową wartość i ponownie zapisuję ją na liście ... i znowu i znowu ...
Problem w tym, że jest to zawsze ten sam obiekt, więc tak naprawdę zmieniam tylko obiekt podstawowy. Kiedy czytam listę, w kółko powtarzam ten sam obiekt.
Jak więc zapisać obiekty na liście w pętli?
Oto mój uproszczony kod
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
Jak więc mogę (dołączyć, rozszerzyć, skopiować lub cokolwiek innego) elementy simpleList, aby każdy wpis zawierał inną instancję obiektu zamiast wskazywać na to samo?