Wenn Sie die Initialisierung von der Klasse ausführen, werden alle Instanzen der Klasse beeinflussen. Wenn dies der Fall ist, ist das nicht darauf zurückzuführen, dass es in einer Liste ist, sondern in der Klasse. Zum Beispiel:
#!/usr/bin/python
class BedrockDenizen():
attributes = []
wilma = BedrockDenizen()
fred = BedrockDenizen()
wilma.attributes.extend(['thin', 'smart'])
fred.attributes.extend(['fat', 'stupid'])
print 'Wilma:', wilma.attributes
print 'Fred:', fred.attributes
Sie werden sehen, dass sowohl Fred und Wilma sind dünn, smart, Fett und dumm.
Wilma: [ 'dünn', 'smart', 'Fett', 'dumm']
Fred: [ 'dünn', 'smart', 'Fett', 'dumm']
eine Möglichkeit, dies zu beheben, ist das Attribut Schöpfung in die init Methode zu setzen, so dass das Attribut pro Instanz ist:
class BedrockDenizen():
def __init__(self):
self.attributes = []
Mit dieser Änderung nur Wilma dünn und klug ist, ein Nur Fred ist dick und dumm.
Wilma: [ 'dünn', 'intelligente']
Fred: [ 'Fett', 'dumm']
Sie uns auch mehr Code zu erhalten müssen. @Bakuriu stellt fest, dass das Problem möglicherweise darin besteht, dass Sie nur eine Instanz erstellen und er möglicherweise Recht hat. Zum Beispiel ist, wenn diese näher an den Code:
class BedrockDenizen():
def __init__(self):
self.attributes = []
neighborhood = [([BedrockDenizen()] * 2) for i in range(2)]
flintstones, rubbles = neighborhood
fred, wilma = flintstones
wilma.attributes.extend(['thin', 'smart'])
fred.attributes.extend(['fat', 'stupid'])
print 'Wilma:', wilma.attributes
print 'Fred:', fred.attributes
Dann Fred und Wilma wird auch weiterhin die gleichen Attribute haben, weil sie nicht wirklich getrennt Menschen sind. Vielleicht möchten Sie Code wie diesen mehr verwenden:
class BedrockDenizen():
def __init__(self):
self.attributes = []
neighborhood = [[BedrockDenizen() for n in range(2)] for i in range(2)]
flintstones, rubbles = neighborhood
fred, wilma = flintstones
wilma.attributes.extend(['thin', 'smart'])
fred.attributes.extend(['fat', 'stupid'])
print 'Wilma:', wilma.attributes
print 'Fred:', fred.attributes
Das hängt davon ab, was Ihre Bedürfnisse sind, obwohl, wie es wie eine seltsame Art und Weise scheint ohne weitere Informationen, Dinge zu tun.
Können Sie ein minimales Arbeitsbeispiel posten? –
Siehe auch http://stackoverflow.com/questions/240178/python-list-of-lists-changes-reflected-across-sublists-unexpectedly –
Ich fürchte, die Antwort auf diese Frage löst ein anderes Problem. –