it-swarm.com.de

python: Anhängen eines Wörterbuchs an eine Liste - Ich sehe ein zeigerartiges Verhalten

Ich habe folgendes im python interpreter versucht:

>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>

Nachdem ich das Wörterbuch 'b' an die Liste 'a' angehängt habe, ändere ich hier 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 einfach den Wert des Wörterbuchs an? 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 sich die Änderung in der Liste niederschlägt. Wie mache ich es?

Vielen Dank für Ihre Zeit!

55
neo29

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.

Bedenken Sie, dass dies eine flache Kopie ergibt. Eine Alternative ist die Verwendung von copy.deepcopy(b) , wodurch eine tiefe Kopie erstellt wird.

103
NPE

Auch mit dikt

a = []
b = {1:'one'}

a.append(dict(b))
print a
b[1]='iuqsdgf'
print a

ergebnis

[{1: 'one'}]
[{1: 'one'}]
20
eyquem
1