Я намагаюся створити сценарій Python, який відкриває кілька баз даних і порівнює їх вміст. У процесі створення цього сценарію я зіткнувся з проблемою при створенні списку, вміст якого є об’єктами, які я створив.
Я спростив програму до її оголених кісток для цієї публікації. Спочатку я створюю новий клас, створюю новий його екземпляр, присвоюю йому атрибут, а потім записую до списку. Потім я присвоюю нове значення екземпляру і знову записую його в список ... і знову і знову ...
Проблема в тому, що це завжди один і той же об’єкт, тому я насправді просто змінюю базовий об’єкт. Коли я читаю список, я повторюю той самий об’єкт знову і знову.
Отже, як записати об’єкти до списку в циклі?
Ось мій спрощений код
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
Отже, як мені (додати, розширити, скопіювати або що завгодно) елементи simpleList, щоб кожен запис містив інший екземпляр об’єкта замість того, щоб усі вказували на той самий?