Wie man ein Dictionary in Python kopiert
- Kopieren eines Dictionaries in Python: Übergeben durch Referenz
- Kopieren Sie ein Dictionary in Python: Übergabe nach Wert
- Seichte Kopie des Python-Dictionaries
In diesem Tutorial wird besprochen, wie Sie ein Dictionary in Python kopieren können.
Wir werden zeigen, wie man ein Dictionary auf zwei Arten kopieren kann: Übergabe nach Wert und Übergabe nach Referenz.
Kopieren eines Dictionaries in Python: Übergeben durch Referenz
In Python werden Objekte nicht implizit kopiert. Wenn wir versuchen, food
in eine neue Variable meal
zu kopieren, werden die Werte von food
in meal
kopiert, aber ebenso die Referenz von food
.
meal = food
Durch die direkte Gleichsetzung eines Objekts mit einem anderen wird das neue Objekt auf das vorherige verweisen; das bedeutet, dass die beiden Variablen auf dasselbe eindeutige Objekt verweisen.
Wenn wir den Wert Fruit
in meal
in Banana
ändern, wird auch der Wert von Fruit
in food
ersetzt.
meal["Fruit"] = "Banana"
print(food)
print(meal)
Ausgabe:
{'Fruit': 'Banana', 'Vegetable': 'Lettuce', 'Poultry': 'Chicken', 'Fish': 'Cod'}
{'Fruit': 'Banana', 'Vegetable': 'Lettuce', 'Poultry': 'Chicken', 'Fish': 'Cod'}
Dasselbe gilt, wenn wir versuchen, einen Schlüssel im meal
-Block zu aktualisieren. Wir ersetzen den Schlüssel Fruit
durch Circle Fruit
und kopieren seinen Wert, bevor wir ihn aus dem Dictionary herausnehmen.
meal["Circle Fruit"] = meal.pop("Fruit")
print(food)
print(meal)
Ausgabe:
{'Vegetable': 'Lettuce', 'Poultry': 'Chicken', 'Fish': 'Cod', 'Circle Fruit': 'Orange'}
{'Vegetable': 'Lettuce', 'Poultry': 'Chicken', 'Fish': 'Cod', 'Circle Fruit': 'Orange'}
Der Wert von food
wird immer noch ersetzt, auch wenn wir ihn nicht direkt modifiziert haben; das liegt daran, dass die Methode, die wir benutzt haben, um food
nach meal
zu kopieren, die Weitergabe per Referenz ist.
Kopieren Sie ein Dictionary in Python: Übergabe nach Wert
Die Wertübergabe bedeutet, dass eine tatsächliche Kopie des Objekts im Speicher erstellt wird, anstatt die Kopie beim Kopieren eines Objekts auf das Originalobjekt zu zeigen.
Wenn wir ein Dictionary kopieren und nicht auf die Originalwerte verweisen wollen, dann sollten wir einen Weg finden, ein neues Objekt im Speicher zu instanziieren. In Python gibt es ein paar Funktionen, die diesen Ansatz unterstützen: dict()
, copy()
und deepcopy()
.
Die Funktion dict()
instanziiert ein neues Dictionary-Objekt. Wenn Sie ein vorhandenes Dictionary um diese Funktion wickeln, wird eine neue Instanz des Objekts erzeugt.
Für diese Methode werden wir dasselbe Beispiel aus dem Dictionary food
verwenden.
meal = dict(food)
Eine andere Möglichkeit der Wertübergabe ist die Verwendung des Befehls copy()
, der dasselbe tut wie dict()
: ein neues Objekt im Speicher instanziieren. Der Unterschied besteht darin, dass copy()
eine eingebaute Funktion von Sammelobjekten, einschließlich Dictionaries, ist.
meal = food.copy()
Für beide Szenarien modifizieren wir den Wert Fruit
und ersetzen den Schlüssel Vegetable
:
meal["Fruit"] = "Apple"
meal["Greens"] = meal.pop("Vegetable")
print(food)
print(meal)
Ausgabe:
{'Fruit': 'Orange', 'Vegetable': 'Lettuce', 'Poultry': 'Chicken', 'Fish': 'Cod'} # food (original)
{'Fruit': 'Apple', 'Poultry': 'Chicken', 'Fish': 'Cod', 'Greens': 'Lettuce'} # meal (copy)
Indem wir ein neues Objekt meal
mit dict()
oder copy()
instanziieren, vermeiden wir es, auf das ursprüngliche Objekt zu verweisen und seine Werte zu aktualisieren, wenn meal
aktualisiert wird.
Seichte Kopie des Python-Dictionaries
Das Problem mit dict()
und copy()
ist, dass sie nur eine flache Kopie auf das verwendete Objekt anwenden; dies ist ein Problem, wenn Ihr Dictionary eine komplexe verschachtelte Struktur hat.
Beim flachen Kopieren wird nur die erste Schicht im Speicher, die es sieht, kopiert, weil verschachtelte Objekte neue Plätze einnehmen.
Lassen Sie uns das ursprüngliche Objekt in ein verschachteltes Dictionary ändern.
info = {
"Numbers": [1, 2, 3],
"Resident Name": "Sherlock",
"Address": {"Street": "Baker", "Number": "221B", "City": "Miami"},
}
Deklarieren wir ein neues Objekt info2
unter Verwendung von copy()
und dict()
zum Kopieren aus info
und ändern einige Werte im verschachtelten Dictionary.
info2 = info.copy() # or dict(info)
info2["Numbers"][1] = 4
info2["Resident Name"] = "Holmes"
info2["Address"]["City"] = "Lexington"
print(info)
print(info2)
Ausgabe:
{'Numbers': [1, 4, 3], 'Resident Name': 'Sherlock', 'Address': {'Street': 'Baker', 'Number': '221B', 'City': 'Lexington'}}
{'Numbers': [1, 4, 3], 'Resident Name': 'Holmes', 'Address': {'Street': 'Baker', 'Number': '221B', 'City': 'Lexington'}}
Die neuen Werte von Numbers
und Address.City
werden sowohl im Original als auch in der Kopie aktualisiert. Der Wert Resident Name
aktualisierte nur den info2
-Block, da wir nur eine flache Kopie des Objekts durchgeführt haben.
Deep Copy Mit dem copy
Modul in Python
Deep Copy behebt im Wesentlichen das Problem des flachen Kopierens. Beim Kopieren eines Objekts prüft es auf verschachtelte Objekte und erzeugt rekursiv neue Objekte im Speicher.
In Python können wir tiefes Kopieren mit dem Modul copy
erreichen, das flache und tiefe Kopieroperationen und Hilfsprogramme enthält.
import copy
Wir werden die Funktion deepcopy()
des Moduls verwenden, um die verschachtelten Objekte innerhalb unseres Dictionaries tief zu kopieren. Wir werden den gleichen Beispiel info
-Block oben verwenden.
info2 = copy.deepcopy(info)
info2["Numbers"][1] = 4
info2["Resident Name"] = "Holmes"
info2["Address"]["City"] = "Lexington"
print(info)
print(info2)
Ausgabe:
{'Numbers': [1, 2, 3], 'Resident Name': 'Sherlock', 'Address': {'Street': 'Baker', 'Number': '221B', 'City': 'Miami'}}
{'Numbers': [1, 4, 3], 'Resident Name': 'Holmes', 'Address': {'Street': 'Baker', 'Number': '221B', 'City': 'Lexington'}}
Nun bleibt das ursprüngliche Dictionary info
unverändert, auch mit den mehrfachen Änderungen in info2
, einschließlich der verschachtelten Objekte.
Zusammenfassend kann man sagen, dass es viele Möglichkeiten gibt, ein Dictionary in Python zu kopieren, aber die Ausgabe wird nicht für alle gleich sein. Wenn Sie ein Dictionary direkt mit =
zuweisen, wird es per Referenz übergeben, wobei auf das Originalobjekt verwiesen wird.
Seichte Kopierfunktionen wie dict()
und copy()
lösen dieses Problem nur für nicht verschachtelte Wörterbücher.
Der beste Weg, ein Dictionary unter Berücksichtigung verschachtelter Wörterbücher zu kopieren, ist die Verwendung der Funktion deepcopy()
, die vom Modul copy
zur Verfügung gestellt wird.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedInVerwandter Artikel - Python Dictionary
- Wie man prüft, ob ein Schlüssel in einem Dictionary in Python vorhanden ist
- Konvertieren eines Dictionaries in eine Liste in Python
- So erhalten Sie alle Dateien eines Verzeichnisses
- Wie finde ich den Maximalwert im Python-Dictionary
- Wie man ein Python-Dictionary nach Wert sortiert
- Wie man zwei Wörterbücher in Python 2 und 3 zusammenführen kann