Dictionary und flache Kopien

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Hi,

ich lese bei Weigend gerade, dass d.copy eine flache Kopie von d zurück gibt, hierbei sei es so: "Aber die Schlüssel-Wert-Paare enthalten nur Referenzen auf enthaltene Objekte und keine Kopien". Ich habe flache Kopien so verstanden, dass es sich nur um einen neuen Namen für ein Objekt handelt und Änderungen am Original Auswirkungen auf die (flache) Kopie haben.

Ich habe einfach mal getestet:

Code: Alles auswählen

>>> d = {"test":"1", "test2":"2"}
>>> c = d.copy()
>>> c
{'test': '1', 'test2': '2'}
>>> c.clear()
>>> d
{'test': '1', 'test2': '2'}
>>> c
{}
Für mich sieht es so aus, dass d.copy() eine echte Kopie eines dict erzeugt, wobei die Kopie unabhängig vom Original verändert werden kann. Mache ich da einen Gedankenfehler???
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hallo pixewakb.

Die Kopie ist in sofern flach, dass die Values nur als Referenze gespeichert werden.

Code: Alles auswählen

In [1]: d = {1: ["a","b"]}

In [2]: c = d.copy()

In [3]: c[1].append("c")

In [4]: d
Out[4]: {1: ['a', 'b', 'c']}
BlackJack

@pixewakb: Wenn eine flache Kopie wirklich so flach wäre, wie Du vermutest, was wäre denn dann der Unterschied zwischen ``a = b`` und ``a = b.copy()``!? So eine `copy()`-Methode wäre doch wohl ziemlich sinnfrei.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Manchmal dauert es etwas, bis der Groschen gefallen ist...

:oops:
Antworten