Ü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!

Python - Copy Lists

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