Estoy intentando crear un script de Python que abra varias bases de datos y compare su contenido. En el proceso de crear ese script, me encontré con un problema al crear una lista cuyo contenido son objetos que he creado.
He simplificado el programa al mínimo para esta publicación. Primero creo una nueva clase, creo una nueva instancia de ella, le asigno un atributo y luego lo escribo en una lista. Luego asigno un nuevo valor a la instancia y nuevamente lo escribo en una lista ... y una y otra vez ...
El problema es que siempre es el mismo objeto, así que en realidad solo estoy cambiando el objeto base. Cuando leo la lista, obtengo una repetición del mismo objeto una y otra vez.
Entonces, ¿cómo se escriben objetos en una lista dentro de un bucle?
Aquí está mi código simplificado
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
Entonces, ¿cómo puedo (agregar, extender, copiar o lo que sea) los elementos de simpleList para que cada entrada contenga una instancia diferente del objeto en lugar de que todos apunten al mismo?