Im Python-Interpreter habe ich Folgendes versucht:
>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>
Hier ändere ich nach dem Anhängen des Wörterbuchs 'b' an die Liste 'a' den Wert, der dem Schlüssel 1 im Wörterbuch 'a' entspricht. Irgendwie spiegelt sich diese Änderung auch in der Liste wider. Wenn ich ein Wörterbuch an eine Liste anhänge, füge ich dann nicht nur den Wert des Wörterbuchs hinzu? Es sieht so aus, als hätte ich einen Zeiger auf das Wörterbuch an die Liste angehängt, und daher werden die Änderungen am Wörterbuch auch in der Liste wiedergegeben.
Ich möchte nicht, dass die Änderung in der Liste angezeigt wird. Wie mache ich es?
Vielen Dank für Ihre Zeit!
python
list
dictionary
neo29
quelle
quelle
Antworten:
Sie haben insofern Recht, als Ihre Liste einen Verweis auf das ursprüngliche Wörterbuch enthält.
a.append(b.copy())
sollte den Trick machen.Denken Sie daran, dass dies eine flache Kopie macht. Eine Alternative ist die Verwendung
copy.deepcopy(b)
, die eine tiefe Kopie erstellt.quelle
Auch mit Diktat
a = [] b = {1:'one'} a.append(dict(b)) print a b[1]='iuqsdgf' print a
Ergebnis
[{1: 'one'}] [{1: 'one'}]
quelle
Verwenden Sie Kopie und tiefe Kopie
quelle