Kopie eines Dictionaries mit Unterlisten

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
martin86_mu
User
Beiträge: 16
Registriert: Montag 10. März 2008, 15:51

Mittwoch 4. Juni 2008, 10:14

Hi, wenn ich ein Dictionary mit Listen als Values mit copy() kopiere und danach im kopierten eine Liste verändere wird auch das original verändert. An was liegt das? Beispiel:

Code: Alles auswählen

DctLst = { 'x': [1,2,3,4,5], 'y':[100,200,300], 'z':0.01}

DctLstCopy = DctLst.copy()

DctLstCopy['x'].append(6)
DctLstCopy['z'] = 0

print "DctLst =",DctLst
print "DctLstCopy =",DctLstCopy
ergibt:

Code: Alles auswählen

DctLst = {'y': [100, 200, 300], 'x': [1, 2, 3, 4, 5, 6], 'z': 0.01}
DctLstCopy = {'y': [100, 200, 300], 'x': [1, 2, 3, 4, 5, 6], 'z': 0}
Eigentlich wollte ich die Originale DctLst nicht mit der 6 ergänzen. Hat jemand ne Erklärung/Abhilfe. Gruß und danke im voraus
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 4. Juni 2008, 10:30

http://docs.python.org/lib/module-copy.html

Das sollte alles erklären! Du brauchst also deepcopy()!
BlackJack

Mittwoch 4. Juni 2008, 10:30

Die `dict.copy()`-Methode erzeugt nur eine flache Kopie, dass heisst im neuen Dictionary sind Kopien der Referenzen auf die Objekte im alten Dictionary. Schau mal ins `copy`-Modul, da gibt's eine `deepcopy()`-Funktion.
martin86_mu
User
Beiträge: 16
Registriert: Montag 10. März 2008, 15:51

Mittwoch 4. Juni 2008, 10:35

Hi, danke euch. Perfekt. gruß
Antworten