Я пытаюсь создать скрипт 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, чтобы каждая запись содержала различный экземпляр объекта, а не все указывающие на один и тот же?