Übersetzung: Python - Listen kopieren
Hallo, ambitionierte Python-Programmierer! Heute tauchen wir in die faszinierende Welt des Kopierens von Listen in Python ein. Als euer freundlicher Nachbar und Informatiklehrer bin ich hier, um euch durch diese Reise mit klaren Erklärungen, zahlreichen Beispielen und vielleicht sogar einem Witz oder zwei zu begleiten. Also, lasst uns anfangen!
Listen in Python kopieren
Bevor wir in die verschiedenen Methoden des Kopierens von Listen einsteigen, lassen Sie uns zuerst verstehen, warum wir überhaupt Listen kopieren müssen. Stell dir vor, du hast eine Einkaufliste und möchtest sie deinem Mitbewohner teilen. Du könntest ihm deine originale Liste geben, aber was passiert, wenn er beschließt, "Schokolade" hinzuzufügen (wer würde es nicht tun)? Plötzlich ist deine sorgfältig geplante gesunde Einkaufliste kompromittiert! Hier kommt das Kopieren ins Spiel.
In Python erstellst du, wenn du eine Liste einer neuen Variablen zuweist, keine neue Liste. Stattdessen erstellst du eine neue Referenz auf die gleiche Liste. Sehen wir uns das im Action an:
original_liste = [1, 2, 3, 4, 5]
neue_liste = original_liste
print("Originale Liste:", original_liste)
print("Neue Liste:", neue_liste)
neue_liste.append(6)
print("Originale Liste nach der Änderung:", original_liste)
print("Neue Liste nach der Änderung:", neue_liste)
Ausgabe:
Originale Liste: [1, 2, 3, 4, 5]
Neue Liste: [1, 2, 3, 4, 5]
Originale Liste nach der Änderung: [1, 2, 3, 4, 5, 6]
Neue Liste nach der Änderung: [1, 2, 3, 4, 5, 6]
Unglaublich? Beide Listen haben sich geändert, weil sie tatsächlich die gleiche Liste im Speicher sind. Hier kommt das Kopieren zur Rettung!
Flache Kopie einer Python-Liste
Eine flache Kopie erstellt ein neues Listenobjekt, aber die Elemente in der neuen Liste sind Referenzen auf die gleichen Objekte in der ursprünglichen Liste. Es ist wie ein Fotokopier von deiner Einkaufliste zu machen – du hast ein neues Stück Papier, aber die darauf geschriebenen Artikel sind die gleichen.
Sehen wir uns an, wie man eine flache Kopie erstellt:
import copy
original_liste = [1, [2, 3], 4]
flache_kopie = copy.copy(original_liste)
print("Originale Liste:", original_liste)
print("Flache Kopie:", flache_kopie)
flache_kopie[1][0] = 'zwei'
print("Originale Liste nach der Änderung:", original_liste)
print("Flache Kopie nach der Änderung:", flache_kopie)
Ausgabe:
Originale Liste: [1, [2, 3], 4]
Flache Kopie: [1, [2, 3], 4]
Originale Liste nach der Änderung: [1, ['zwei', 3], 4]
Flache Kopie nach der Änderung: [1, ['zwei', 3], 4]
Notiere, wie die Änderung der verschachtelten Liste in der flachen Kopie auch die ursprüngliche Liste beeinflusst? Das liegt daran, dass die verschachtelte Liste immer noch eine Referenz auf das gleiche Objekt im Speicher ist.
Tiefene Kopie einer Python-Liste
Eine tiefe Kopie erstellt hingegen eine neue Liste und fügt rekursiv Kopien von verschachtelten Objekten hinzu. Es ist wie deine gesamte Einkaufliste von Hand zu schreiben – alles ist brandneu und unabhängig.
So erstellst du eine tiefe Kopie:
import copy
original_liste = [1, [2, 3], 4]
tiefe_kopie = copy.deepcopy(original_liste)
print("Originale Liste:", original_liste)
print("Tiefe Kopie:", tiefe_kopie)
tiefe_kopie[1][0] = 'zwei'
print("Originale Liste nach der Änderung:", original_liste)
print("Tiefe Kopie nach der Änderung:", tiefe_kopie)
Ausgabe:
Originale Liste: [1, [2, 3], 4]
Tiefe Kopie: [1, [2, 3], 4]
Originale Liste nach der Änderung: [1, [2, 3], 4]
Tiefe Kopie nach der Änderung: [1, ['zwei', 3], 4]
Dieses Mal beeinflusste die Änderung der tiefen Kopie nicht die ursprüngliche Liste. Sie ist vollständig unabhängig!
Kopieren von Listen mit Slice-Notation
Nun schauen wir uns einige andere Methoden zum Kopieren von Listen an. Eine der einfachsten Methoden ist die Verwendung der Slice-Notation. Es ist, als würde man sagen, "Ich möchte eine Kopie der gesamten Liste von Anfang bis Ende."
original_liste = [1, 2, 3, 4, 5]
slice_kopie = original_liste[:]
print("Originale Liste:", original_liste)
print("Slice-Kopie:", slice_kopie)
slice_kopie.append(6)
print("Originale Liste nach der Änderung:", original_liste)
print("Slice-Kopie nach der Änderung:", slice_kopie)
Ausgabe:
Originale Liste: [1, 2, 3, 4, 5]
Slice-Kopie: [1, 2, 3, 4, 5]
Originale Liste nach der Änderung: [1, 2, 3, 4, 5]
Slice-Kopie nach der Änderung: [1, 2, 3, 4, 5, 6]
Diese Methode erstellt eine flache Kopie der Liste, was für Listen von unveränderlichen Objekten wie Zahlen und Zeichenketten in der Regel ausreichend ist.
Kopieren von Listen mit der list() Funktion
Eine andere Methode, um eine Kopie zu erstellen, ist die Verwendung der list()
Funktion. Es ist, als würde man Python sagen, "Mach mir eine neue Liste, die genauso aussieht wie diese."
original_liste = [1, 2, 3, 4, 5]
list_kopie = list(original_liste)
print("Originale Liste:", original_liste)
print("List-Kopie:", list_kopie)
list_kopie.append(6)
print("Originale Liste nach der Änderung:", original_liste)
print("List-Kopie nach der Änderung:", list_kopie)
Ausgabe:
Originale Liste: [1, 2, 3, 4, 5]
List-Kopie: [1, 2, 3, 4, 5]
Originale Liste nach der Änderung: [1, 2, 3, 4, 5]
List-Kopie nach der Änderung: [1, 2, 3, 4, 5, 6]
Diese Methode erstellt auch eine flache Kopie der Liste.
Kopieren von Listen mit der copy() Funktion
Letztlich, aber nicht zuletzt, haben wir die copy()
Methode, die eine eingebaute Methode für Listen ist. Es ist, als würde die Liste sagen, "Hier, nimm eine Kopie von mir!"
original_liste = [1, 2, 3, 4, 5]
copy_methode = original_liste.copy()
print("Originale Liste:", original_liste)
print("Copy-Methode:", copy_methode)
copy_methode.append(6)
print("Originale Liste nach der Änderung:", original_liste)
print("Copy-Methode nach der Änderung:", copy_methode)
Ausgabe:
Originale Liste: [1, 2, 3, 4, 5]
Copy-Methode: [1, 2, 3, 4, 5]
Originale Liste nach der Änderung: [1, 2, 3, 4, 5]
Copy-Methode nach der Änderung: [1, 2, 3, 4, 5, 6]
Diese Methode erstellt auch eine flache Kopie der Liste.
Nun Zusammenfassung aller dieser Methoden in einer praktischen Tabelle:
Methode | Syntax | Art der Kopie | Bemerkungen |
---|---|---|---|
Zuweisung | neue_liste = original_liste |
Referenz | Keine wahre Kopie |
Flache Kopie | copy.copy(original_liste) |
Flach | Neue Liste, gleiche Objektreferenzen |
Tiefe Kopie | copy.deepcopy(original_liste) |
Tief | Neue Liste, neue Objektreferenzen |
Slice-Notation | original_liste[:] |
Flach | Einfach und lesbar |
list() Funktion | list(original_liste) |
Flach | Klarer INTENTION |
copy() Methode | original_liste.copy() |
Flach | Eingebaute Listenmethode |
Denke daran, die richtige Kopiemethode zu wählen hängt von deinen spezifischen Bedürfnissen ab. Wenn du mit einfachen Listen von unveränderlichen Objekten arbeitest, ist eine flache Kopie in der Regel ausreichend. Aber wenn du mit verschachtelten Listen oder veränderlichen Objekten zu tun hast, möchtest du vielleicht eine tiefe Kopie machen, um vollständige Unabhängigkeit zu gewährleisten.
Und so ist es! Du bist nun mit dem Wissen ausgestattet, um wie ein Profi Listen zu kopieren. Wenn du das nächste Mal deine Einkaufliste teilen möchtest, wirst du genau wissen, wie du eine Kopie machen kannst, ohne dass riskierst, dass jemand unerwartete Dinge hinzufügt. Happy coding und möge jede Liste perfekt kopiert sein!
Credits: Image by storyset