Ich setze dict2 = dict1
. Wenn ich dict2
bearbeite, ändert sich auch das Original dict1
. Warum?
>>> dict1 = {"key1": "value1", "key2": "value2"}
>>> dict2 = dict1
>>> dict2["key2"] = "WARUM?!"
>>> dict1
{'key2': 'WARUM?!', 'key1': 'value1'}
Ich setze dict2 = dict1
. Wenn ich dict2
bearbeite, ändert sich auch das Original dict1
. Warum?
>>> dict1 = {"key1": "value1", "key2": "value2"}
>>> dict2 = dict1
>>> dict2["key2"] = "WARUM?!"
>>> dict1
{'key2': 'WARUM?!', 'key1': 'value1'}
Die besten und einfachsten Möglichkeiten, um eine Kopie eines dict sowohl in Python 2.7 als auch in 3 zu erstellen, sind...
Um eine Kopie eines einfachen (einstufigen) Wörterbuchs zu erstellen:
1. Verwenden der Methode dict(), anstatt einen Verweis zu generieren, der auf das vorhandene Wörterbuch zeigt.
my_dict1 = dict()
my_dict1["message"] = "Hallo Python"
print(my_dict1) # {'message':'Hallo Python'}
my_dict2 = dict(my_dict1)
print(my_dict2) # {'message':'Hallo Python'}
# Änderungen in my_dict1 vorgenommen
my_dict1["name"] = "Emrit"
print(my_dict1) # {'message':'Hallo Python', 'name' : 'Emrit'}
print(my_dict2) # {'message':'Hallo Python'}
2. Verwenden der integrierten Methode update() des Python-Wörterbuches.
my_dict2 = dict()
my_dict2.update(my_dict1)
print(my_dict2) # {'message':'Hello Python'}
# Änderungen in my_dict1 vorgenommen
my_dict1["name"] = "Emrit"
print(my_dict1) # {'message':'Hello Python', 'name' : 'Emrit'}
print(my_dict2) # {'message':'Hello Python'}
Um eine Kopie eines verschachtelten oder komplexen Wörterbuchs zu erstellen:
Verwenden Sie das integrierte copy-Modul, das generische Shallow- und Deep-Kopieroperationen bereitstellt. Dieses Modul ist sowohl in Python 2.7 als auch in 3.* vorhanden.
import copy
my_dict2 = copy.deepcopy(my_dict1)
Sie können auch einfach ein neues Wörterbuch mit einer Wörterbuch-Komprehension erstellen. Dies vermeidet das Importieren von Kopie.
dout = dict((k,v) for k,v in mydict.items())
Natürlich können Sie in Python >= 2.7 auch folgendes tun:
dout = {k:v for k,v in mydict.items()}
Aber für Abwärtskompatibilität ist die obige Methode besser.
Zusätzlich zu den anderen bereitgestellten Lösungen können Sie **
verwenden, um das Wörterbuch in ein leeres Wörterbuch zu integrieren, z. B.,
`shallow_copy_of_other_dict = {other_dict}`**.
Jetzt haben Sie eine "flache" Kopie von other_dict
.
Auf Ihr Beispiel angewendet:
>>> dict1 = {"key1": "value1", "key2": "value2"}
>>> dict2 = {**dict1}
>>> dict2
{'key1': 'value1', 'key2': 'value2'}
>>> dict2["key2"] = "WHY?!"
>>> dict1
{'key1': 'value1', 'key2': 'value2'}
>>>
Assignierungsanweisungen in Python kopieren keine Objekte, sie erstellen Bindungen zwischen einem Ziel und einem Objekt.
Also, dict2 = dict1
, es entsteht eine weitere Bindung zwischen dict2
und dem Objekt, auf das dict1
verweist.
Wenn Sie ein Dictionary kopieren möchten, können Sie das copy-Modul
verwenden. Das Copy-Modul hat zwei Schnittstellen:
copy.copy(x)
Gibt eine oberflächliche Kopie von x zurück.
copy.deepcopy(x)
Gibt eine tiefe Kopie von x zurück.
Der Unterschied zwischen flacher und tiefer Kopie ist nur relevant für zusammengesetzte Objekte (Objekte, die andere Objekte enthalten, wie Listen oder Klasseninstanzen):
Eine flache Kopie konstruiert ein neues zusammengesetztes Objekt und fügt dann (soweit möglich) Verweise auf die Objekte darin ein, die im Original gefunden wurden.
Eine tiefe Kopie konstruiert ein neues zusammengesetztes Objekt und fügt dann rekursiv Kopien davon ein, die im Original gefunden wurden.
Zum Beispiel, in Python 2.7.9:
>>> import copy
>>> a = [1,2,3,4,['a', 'b']]
>>> b = a
>>> c = copy.copy(a)
>>> d = copy.deepcopy(a)
>>> a.append(5)
>>> a[4].append('c')
und das Ergebnis ist:
>>> a
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> b
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> c
[1, 2, 3, 4, ['a', 'b', 'c']]
>>> d
[1, 2, 3, 4, ['a', 'b']]
Sie können die neu erstellte Kopie in einem Schritt kopieren und bearbeiten, indem Sie den dict
-Konstruktor mit zusätzlichen Schlüsselwortargumenten aufrufen:
>>> dict1 = {"key1": "value1", "key2": "value2"}
>>> dict2 = dict(dict1, key2="WARUM?!")
>>> dict1
{'key2': 'value2', 'key1': 'value1'}
>>> dict2
{'key2': 'WARUM?!', 'key1': 'value1'}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.