Seite 1 von 1

Dictionary und flache Kopien

Verfasst: Montag 8. August 2011, 13:12
von pixewakb
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???

Re: Dictionary und flache Kopien

Verfasst: Montag 8. August 2011, 13:53
von Zap
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']}

Re: Dictionary und flache Kopien

Verfasst: Montag 8. August 2011, 14:21
von 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.

Re: Dictionary und flache Kopien

Verfasst: Montag 8. August 2011, 20:09
von pixewakb
Manchmal dauert es etwas, bis der Groschen gefallen ist...

:oops: