He definido una clase Listener
y he creado un diccionario de objetos Listener
. Cada oyente tiene un id
para identificarlos, y una lista de artists
que escuchan, artists = []
. Agregar algo a la lista artists
lo agrega para todas las instancias de la clase Listener
, en lugar de la instancia referida. Este es mi problema.Lista como miembro de una clase python, ¿por qué se comparte su contenido en todas las instancias de la clase?
La clase de detector se define de la siguiente manera:
class Listener:
id = ""
artists = []
def __init__(self, id):
self.id = id
def addArtist(self, artist, plays):
print self.id # debugging...
print "pre: ", self.artists
self.artists.append(artist)
print "post: ", self.artists
Aquí es mi depuración de código de prueba:
def debug():
listeners = {}
listeners["0"] = Listener("0")
listeners["1"] = Listener("1")
listeners["0"].addArtist("The Beatles", 10)
listeners["0"].addArtist("Lady Gaga", 4)
listeners["1"].addArtist("Ace of Base", 5)
Y la salida:
0
pre: []
post: ['The Beatles']
0
pre: ['The Beatles']
post: ['The Beatles', 'Lady Gaga']
1
pre: ['The Beatles', 'Lady Gaga']
post: ['The Beatles', 'Lady Gaga', 'Ace of Base']
Mi resultado esperado es que el la llamada final addArtist("Ace of Base", 5)
daría como resultado la salida
1
pre: []
post: ['Ace of Base']
¿Es esta una sutileza de Python que no entiendo? ¿Por qué es este el resultado y cómo puedo obtener el resultado deseado en su lugar? ¡Gracias!