Welche Möglichkeiten gibt es, eine Liste in Python zu klonen oder zu kopieren?
Während der Verwendung new_list = my_list
werden Änderungen an new_list
Änderungen my_list
jedes Mal vorgenommen. Warum ist das?
Mit new_list = my_list
haben Sie eigentlich nicht zwei Listen. Die Zuweisung kopiert nur den Verweis auf die Liste, nicht die tatsächliche Liste, also beide new_list
und my_list
verweist nach der Zuweisung auf dieselbe Liste.
Um die Liste tatsächlich zu kopieren, haben Sie verschiedene Möglichkeiten:
Sie können die integrierte list.copy()
Methode verwenden (verfügbar seit Python 3.3):
new_list = old_list.copy()
Sie können es in Scheiben schneiden:
new_list = old_list[:]
Alex Martellis Meinung (zumindest 2007 ) ist, dass es sich um eine seltsame Syntax handelt und es keinen Sinn macht, sie jemals zu verwenden . ;) (Seiner Meinung nach ist der nächste besser lesbar).
Sie können die eingebaute list()
Funktion verwenden:
new_list = list(old_list)
Sie können generische verwenden copy.copy()
:
import copy
new_list = copy.copy(old_list)
Dies ist etwas langsamer als list()
weil es zuerst den Datentyp von herausfinden muss old_list
.
Wenn die Liste Objekte enthält und Sie diese auch kopieren möchten, verwenden Sie generic copy.deepcopy()
:
import copy
new_list = copy.deepcopy(old_list)
Offensichtlich die langsamste und speicherintensivste Methode, aber manchmal unvermeidlich.
Beispiel:
import copy
class Foo(object):
def __init__(self, val):
self.val = val
def __repr__(self):
return 'Foo({!r})'.format(self.val)
foo = Foo(1)
a = ['foo', foo]
b = a.copy()
c = a[:]
d = list(a)
e = copy.copy(a)
f = copy.deepcopy(a)
# edit orignal list and instance
a.append('baz')
foo.val = 5
print('original: %r\nlist.copy(): %r\nslice: %r\nlist(): %r\ncopy: %r\ndeepcopy: %r'
% (a, b, c, d, e, f))
Ergebnis:
original: ['foo', Foo(5), 'baz']
list.copy(): ['foo', Foo(5)]
slice: ['foo', Foo(5)]
list(): ['foo', Foo(5)]
copy: ['foo', Foo(5)]
deepcopy: ['foo', Foo(1)]
newlist = [*mylist]
ist auch eine Möglichkeit in Python 3.newlist = list(mylist)
Vielleicht ist es aber klarer.Felix gab bereits eine ausgezeichnete Antwort, aber ich dachte, ich würde einen Geschwindigkeitsvergleich der verschiedenen Methoden durchführen:
copy.deepcopy(old_list)
Copy()
Methode zum Kopieren von Klassen mit DeepcopyCopy()
Methode, die keine Klassen kopiert (nur Dikte / Listen / Tupel)for item in old_list: new_list.append(item)
[i for i in old_list]
(ein Listenverständnis )copy.copy(old_list)
list(old_list)
new_list = []; new_list.extend(old_list)
old_list[:]
( Listenaufteilung )Das schnellste ist also das Aufteilen von Listen. Aber beachten Sie, dass
copy.copy()
,list[:]
undlist(list)
, im Gegensatz zucopy.deepcopy()
und die Python - Version nicht kopiert keine Listen, Wörterbücher und Klasseninstanzen in der Liste, so dass , wenn die Originale zu ändern, werden sie in der kopierten Liste ändern zu und umgekehrt.(Hier ist das Skript, wenn jemand interessiert ist oder Probleme ansprechen möchte :)
quelle
timeit
Modul. Außerdem kann man aus solchen willkürlichen Mikro-Benchmarks nicht viel schließen.[*old_list]
sollte dies in etwa der Option entsprechen.list(old_list)
Da es sich jedoch um eine Syntax handelt, die keine allgemeinen Funktionsaufrufpfade sind, wird ein wenig Laufzeit eingespart (und im Gegensatz zuold_list[:]
der Option , die keine Konvertierung eingibt).[*old_list]
funktioniert auf jedem iterable und erzeugt alist
).timeit
50 m[*old_list]
scheint tatsächlich fast jede andere Methode zu übertreffen. (siehe meine Antwort in früheren Kommentaren verlinkt)Mir wurde gesagt, dass Python 3.3+ eine
list.copy()
Methode hinzufügt , die so schnell wie das Schneiden sein sollte:newlist = old_list.copy()
quelle
s.copy()
schafft eine flache Kopie vons
(gleich wies[:]
).python3.8
,.copy()
ist etwas schneller als Slicing. Siehe unten @AaronsHall Antwort.In Python 3 kann eine flache Kopie erstellt werden mit:
In Python 2 und 3 können Sie eine flache Kopie mit einem vollständigen Ausschnitt des Originals erhalten:
Erläuterung
Es gibt zwei semantische Möglichkeiten, eine Liste zu kopieren. Eine flache Kopie erstellt eine neue Liste derselben Objekte, eine tiefe Kopie erstellt eine neue Liste mit neuen äquivalenten Objekten.
Flache Listenkopie
Eine flache Kopie kopiert nur die Liste selbst, bei der es sich um einen Container mit Verweisen auf die Objekte in der Liste handelt. Wenn die darin enthaltenen Objekte veränderlich sind und eines geändert wird, wird die Änderung in beiden Listen wiedergegeben.
In Python 2 und 3 gibt es verschiedene Möglichkeiten, dies zu tun. Die Python 2-Möglichkeiten funktionieren auch in Python 3.
Python 2
In Python 2 besteht die idiomatische Art, eine flache Kopie einer Liste zu erstellen, darin, ein vollständiges Stück des Originals zu erstellen:
Sie können dasselbe auch erreichen, indem Sie die Liste durch den Listenkonstruktor übergeben.
Die Verwendung des Konstruktors ist jedoch weniger effizient:
Python 3
In Python 3 erhalten Listen die folgende
list.copy
Methode:In Python 3.5:
Wenn Sie einen anderen Zeiger erstellen, wird keine Kopie erstellt
my_list
ist nur ein Name, der auf die tatsächliche Liste im Speicher verweist. Wenn Sie sagen, dassnew_list = my_list
Sie keine Kopie erstellen, fügen Sie einfach einen anderen Namen hinzu, der auf diese ursprüngliche Liste im Speicher verweist. Wir können ähnliche Probleme haben, wenn wir Kopien von Listen erstellen.Die Liste ist nur ein Array von Zeigern auf den Inhalt. Eine flache Kopie kopiert also nur die Zeiger. Sie haben also zwei verschiedene Listen, aber sie haben den gleichen Inhalt. Um Kopien des Inhalts zu erstellen, benötigen Sie eine tiefe Kopie.
Tiefe Kopien
Verwenden Sie
deepcopy
imcopy
Modul Folgendes, um eine tiefe Kopie einer Liste in Python 2 oder 3 zu erstellen :Um zu demonstrieren, wie wir auf diese Weise neue Unterlisten erstellen können:
Wir sehen also, dass die tief kopierte Liste eine völlig andere Liste ist als das Original. Sie könnten Ihre eigene Funktion rollen - aber nicht. Mit der Deepcopy-Funktion der Standardbibliothek können Sie wahrscheinlich Fehler verursachen, die Sie sonst nicht hätten.
Nicht benutzen
eval
Sie können dies als einen Weg zur Deepcopy sehen, aber tun Sie es nicht:
In 64-Bit-Python 2.7:
auf 64-Bit-Python 3.5:
quelle
list_copy=[]
for item in list: list_copy.append(copy(item))
und es ist viel schneller.Es gibt bereits viele Antworten, die Ihnen sagen, wie Sie eine ordnungsgemäße Kopie erstellen können, aber keine davon gibt an, warum Ihre ursprüngliche "Kopie" fehlgeschlagen ist.
Python speichert keine Werte in Variablen. Es bindet Namen an Objekte. Ihre ursprüngliche Aufgabe hat das Objekt, auf das von verwiesen wird, ebenfalls
my_list
gebundennew_list
. Unabhängig davon, welchen Namen Sie verwenden, gibt es immer noch nur eine Liste. Änderungen, die beim Verweisen auf diesen Namen vorgenommenmy_list
werden, bleiben also bestehen, wenn Sie auf ihn verweisennew_list
. Jede der anderen Antworten auf diese Frage bietet Ihnen verschiedene Möglichkeiten, ein neues Objekt zum Binden zu erstellennew_list
.Jedes Element einer Liste verhält sich wie ein Name, indem jedes Element nicht ausschließlich an ein Objekt gebunden wird. Eine flache Kopie erstellt eine neue Liste, deren Elemente an dieselben Objekte wie zuvor gebunden sind.
Um Ihre Listenkopie noch einen Schritt weiter zu führen, kopieren Sie jedes Objekt, auf das sich Ihre Liste bezieht, und binden Sie diese Elementkopien an eine neue Liste.
Dies ist noch keine tiefe Kopie, da jedes Element einer Liste auf andere Objekte verweisen kann, genau wie die Liste an ihre Elemente gebunden ist. So rekursiv kopieren Sie jedes Element in der Liste und dann jedes andere Objekt, auf das jedes Element verweist, usw. Führen Sie eine Tiefenkopie durch.
Weitere Informationen zu Eckfällen beim Kopieren finden Sie in der Dokumentation .
quelle
Verwenden
thing[:]
quelle
Beginnen wir von vorne und untersuchen diese Frage.
Nehmen wir also an, Sie haben zwei Listen:
Und wir müssen beide Listen kopieren, beginnend mit der ersten Liste:
Versuchen wir also zunächst, die Variable
copy
auf unsere ursprüngliche Liste zu setzenlist_1
:Wenn Sie jetzt denken, kopieren Sie die Liste_1, dann liegen Sie falsch. Die
id
Funktion kann uns zeigen, ob zwei Variablen auf dasselbe Objekt zeigen können. Lass uns das versuchen:Die Ausgabe ist:
Beide Variablen sind genau das gleiche Argument. Bist du überrascht?
Da wir wissen, dass Python nichts in einer Variablen speichert, verweisen Variablen nur auf das Objekt und das Objekt speichert den Wert. Hier ist das Objekt ein,
list
aber wir haben zwei Verweise auf dasselbe Objekt durch zwei verschiedene Variablennamen erstellt. Dies bedeutet, dass beide Variablen auf dasselbe Objekt zeigen, nur mit unterschiedlichen Namen.Wenn Sie dies tun
copy=list_1
, geschieht tatsächlich Folgendes:Hier in der Bildliste_1 und Kopie sind zwei Variablennamen, aber das Objekt ist für beide Variablen gleich
list
Wenn Sie also versuchen, die kopierte Liste zu ändern, wird auch die ursprüngliche Liste geändert, da die Liste nur eine enthält. Sie ändern diese Liste unabhängig davon, ob Sie sie aus der kopierten Liste oder aus der ursprünglichen Liste ausführen:
Ausgabe:
Also hat es die ursprüngliche Liste geändert:
Kommen wir nun zu einer pythonischen Methode zum Kopieren von Listen.
Diese Methode behebt das erste Problem, das wir hatten:
Wie wir sehen können, haben unsere beiden Listen unterschiedliche IDs und es bedeutet, dass beide Variablen auf unterschiedliche Objekte zeigen. Was hier also tatsächlich vor sich geht, ist:
Versuchen wir nun, die Liste zu ändern und zu prüfen, ob das vorherige Problem weiterhin besteht:
Die Ausgabe ist:
Wie Sie sehen, wurde nur die kopierte Liste geändert. Das heißt, es hat funktioniert.
Glaubst du, wir sind fertig? Versuchen wir, unsere verschachtelte Liste zu kopieren.
list_2
sollte auf ein anderes Objekt verweisen, von dem eine Kopie istlist_2
. Lass uns nachsehen:Wir bekommen die Ausgabe:
Jetzt können wir davon ausgehen, dass beide Listen auf unterschiedliche Objekte verweisen. Versuchen wir nun, sie zu ändern, und sehen, dass sie das geben, was wir wollen:
Dies gibt uns die Ausgabe:
Dies mag etwas verwirrend erscheinen, da dieselbe Methode, die wir zuvor verwendet haben, funktioniert hat. Versuchen wir das zu verstehen.
Wenn Sie das tun:
Sie kopieren nur die äußere Liste, nicht die innere Liste. Wir können die
id
Funktion noch einmal verwenden, um dies zu überprüfen.Die Ausgabe ist:
Wenn wir das tun
copy_2=list_2[:]
, passiert Folgendes:Es wird die Kopie der Liste erstellt, aber nur die Kopie der äußeren Liste, nicht die Kopie der verschachtelten Liste. Die verschachtelte Liste ist für beide Variablen gleich. Wenn Sie also versuchen, die verschachtelte Liste zu ändern, wird auch die ursprüngliche Liste geändert, da das verschachtelte Listenobjekt identisch ist für beide Listen.
Was ist die Lösung? Die Lösung ist die
deepcopy
Funktion.Lassen Sie uns dies überprüfen:
Beide äußeren Listen haben unterschiedliche IDs. Versuchen wir dies bei den inneren verschachtelten Listen.
Die Ausgabe ist:
Wie Sie sehen können, sind beide IDs unterschiedlich, was bedeutet, dass wir davon ausgehen können, dass beide verschachtelten Listen jetzt auf unterschiedliche Objekte zeigen.
Das heißt, wenn Sie tun,
deep=deepcopy(list_2)
was tatsächlich passiert:Beide verschachtelten Listen zeigen auf unterschiedliche Objekte und haben jetzt eine separate Kopie der verschachtelten Liste.
Versuchen wir nun, die verschachtelte Liste zu ändern und festzustellen, ob das vorherige Problem behoben wurde oder nicht:
Es gibt aus:
Wie Sie sehen, wurde die ursprünglich verschachtelte Liste nicht geändert, sondern nur die kopierte Liste.
quelle
Pythons Redewendung dafür ist
newList = oldList[:]
quelle
Python 3.6 Timings
Hier sind die Timing-Ergebnisse mit Python 3.6.8. Denken Sie daran, dass diese Zeiten relativ zueinander und nicht absolut sind.
Ich habe mich daran gehalten, nur flache Kopien zu erstellen, und einige neue Methoden hinzugefügt, die in Python2 nicht möglich waren, wie
list.copy()
(das Python3- Slice-Äquivalent ) und zwei Formen des Entpackens von Listen (*new_list, = list
undnew_list = [*list]
):Wir können sehen, dass der Python2-Gewinner immer noch gut abschneidet, Python3 jedoch nicht
list.copy()
wesentlich übertrifft , insbesondere angesichts der überlegenen Lesbarkeit des letzteren.Das dunkle Pferd ist die Auspack- und Umpackmethode (
b = [*a]
), die ~ 25% schneller als das rohe Schneiden und mehr als doppelt so schnell wie die andere Auspackmethode (*b, = a
) ist.b = a * 1
macht sich auch überraschend gut.Beachten Sie, dass diese Methoden tun nicht gleichwertige Ergebnisse für jede Eingabe andere als Listen ausgegeben. Sie funktionieren alle für schneidbare Objekte, einige für iterierbare Objekte, aber nur
copy.copy()
für allgemeinere Python-Objekte.Hier ist der Testcode für Interessenten ( Vorlage von hier ):
quelle
b=[*a]
- der eine offensichtliche Weg, dies zu tun;).Alle anderen Mitwirkenden gaben großartige Antworten, die funktionieren, wenn Sie eine eindimensionale (abgestufte) Liste haben. Die bisher genannten Methoden
copy.deepcopy()
funktionieren jedoch nur zum Klonen / Kopieren einer Liste und lassen sie nicht auf die verschachteltenlist
Objekte verweisen, wenn Sie sich befinden Arbeiten mit mehrdimensionalen, verschachtelten Listen (Liste der Listen). Während Felix Kling in seiner Antwort darauf verweist, gibt es ein bisschen mehr zu dem Problem und möglicherweise eine Problemumgehung mit integrierten Funktionen, die sich als schnellere Alternative zu erweisen könntendeepcopy
.Während
new_list = old_list[:]
,copy.copy(old_list)'
und für Py3kold_list.copy()
Arbeit für Einzel nivelliert Listen, sie werden wieder an den zu zeigenlist
innerhalb der verschachtelten Objekteold_list
und dienew_list
, und Änderungen an einem derlist
Objekte in der anderen verewigt.Bearbeiten: Neue Informationen ans Licht gebracht
Wie bereits erwähnt, treten bei Verwendung des
copy
Moduls undcopy.deepcopy
bei mehrdimensionalen Listen erhebliche Leistungsprobleme auf .quelle
repr()
ausreicht, um das Objekt neu zu erstellen. Aucheval()
ist ein Werkzeug der letzten Instanz; siehe Eval ist wirklich gefährlich von SO-Veteran Ned Batchelder für Details. Wenn Sie sich für die Verwendung einsetzeneval()
, sollten Sie wirklich erwähnen, dass dies gefährlich sein kann.eval()
Funktion in Python im Allgemeinen ein Risiko darstellt. Es ist nicht so sehr, ob Sie die Funktion im Code verwenden oder nicht, sondern dass es sich um eine Sicherheitslücke in Python an und für sich handelt. Mein Beispiel ist die Verwendung nicht mit einer Funktion , den Eingang empfängt voninput()
,sys.agrv
oder sogar eine Textdatei. Es geht eher darum, eine leere mehrdimensionale Liste einmal zu initialisieren und sie dann einfach in eine Schleife zu kopieren, anstatt sie bei jeder Iteration der Schleife neu zu initialisieren.new_list = eval(repr(old_list))
, dass es eine schlechte Idee ist, ist es wahrscheinlich auch viel zu langsam, um zu arbeiten.Es überrascht mich, dass dies noch nicht erwähnt wurde, der Vollständigkeit halber ...
Sie können das Entpacken von Listen mit dem "splat operator": durchführen
*
, der auch Elemente Ihrer Liste kopiert.Der offensichtliche Nachteil dieser Methode ist, dass sie nur in Python 3.5+ verfügbar ist.
In Bezug auf das Timing scheint dies jedoch besser zu funktionieren als andere gängige Methoden.
quelle
old_list
undnew_list
sind zwei verschiedene Listen, die Bearbeitung wird man nicht die andere ändern (es sei denn , es ist direkt auf die Elementen selbst (wie Liste der Liste) mutiert, nichts dieser Methoden sind tiefe Kopien).Ein sehr einfacher Ansatz unabhängig von der Python-Version fehlte in bereits gegebenen Antworten, die Sie die meiste Zeit verwenden können (zumindest ich):
Wenn my_list jedoch andere Container enthält (z. B. verschachtelte Listen), müssen Sie deepcopy verwenden, wie in den obigen Antworten aus der Kopierbibliothek vorgeschlagen. Zum Beispiel:
. Bonus : Wenn Sie keine Elemente kopieren möchten, verwenden Sie (auch bekannt als flache Kopie):
Lassen Sie uns den Unterschied zwischen Lösung 1 und Lösung 2 verstehen
Wie Sie sehen, hat Lösung 1 perfekt funktioniert, als wir die verschachtelten Listen nicht verwendet haben. Lassen Sie uns überprüfen, was passieren wird, wenn wir Lösung 1 auf verschachtelte Listen anwenden.
quelle
Beachten Sie, dass es einige Fälle gibt, in denen Sie, wenn Sie Ihre eigene benutzerdefinierte Klasse definiert haben und die Attribute beibehalten möchten, die Alternativen verwenden sollten
copy.copy()
odercopy.deepcopy()
nicht, z. B. in Python 3:Ausgänge:
quelle
new_list = my_list
Versuchen Sie das zu verstehen. Angenommen, my_list befindet sich im Heapspeicher an Position X, dh my_list zeigt auf das X.new_list = my_list
Indem Sie jetzt zuweisen, dass new_list auf das X zeigt. Dies wird als flache Kopie bezeichnet.Wenn Sie jetzt zuweisen,
new_list = my_list[:]
kopieren Sie einfach jedes Objekt von my_list nach new_list. Dies ist als Deep Copy bekannt.Die andere Möglichkeit, dies zu tun, ist:
new_list = list(old_list)
import copy new_list = copy.deepcopy(old_list)
quelle
Ich wollte etwas anderes posten als einige der anderen Antworten. Auch wenn dies höchstwahrscheinlich nicht die verständlichste oder schnellste Option ist, bietet es einen Einblick in die Funktionsweise von Deep Copy und ist eine weitere alternative Option für Deep Copy. Es spielt keine Rolle, ob meine Funktion Fehler aufweist, da der Zweck darin besteht, einen Weg aufzuzeigen, um Objekte wie die Antworten auf Fragen zu kopieren, aber dies auch als Punkt zu verwenden, um zu erklären, wie Deepcopy im Kern funktioniert.
Im Mittelpunkt jeder Deep Copy-Funktion steht die Möglichkeit, eine flache Kopie zu erstellen. Wie? Einfach. Jede Deep Copy-Funktion dupliziert nur die Container unveränderlicher Objekte. Wenn Sie eine verschachtelte Liste tief kopieren, duplizieren Sie nur die äußeren Listen, nicht die veränderlichen Objekte in den Listen. Sie duplizieren nur die Container. Das gleiche gilt auch für Klassen. Wenn Sie eine Klasse vertiefen, kopieren Sie alle ihre veränderlichen Attribute. Also, wie? Wie kommt es, dass Sie nur die Container wie Listen, Diktate, Tupel, Iter, Klassen und Klasseninstanzen kopieren müssen?
Es ist einfach. Ein veränderliches Objekt kann nicht wirklich dupliziert werden. Es kann niemals geändert werden, es ist also nur ein einziger Wert. Das bedeutet, dass Sie niemals Zeichenfolgen, Zahlen, Bools oder ähnliches duplizieren müssen. Aber wie würden Sie die Container duplizieren? Einfach. Sie initialisieren einfach einen neuen Container mit allen Werten. Deepcopy beruht auf Rekursion. Es dupliziert alle Container, auch solche mit Containern, bis keine Container mehr übrig sind. Ein Container ist ein unveränderliches Objekt.
Sobald Sie das wissen, ist es ziemlich einfach, ein Objekt ohne Referenzen vollständig zu duplizieren. Hier ist eine Funktion zum Deepcopying grundlegender Datentypen (würde für benutzerdefinierte Klassen nicht funktionieren, aber Sie können diese jederzeit hinzufügen)
Pythons eigene integrierte Deepcopy basiert auf diesem Beispiel. Der einzige Unterschied besteht darin, dass es andere Typen unterstützt und Benutzerklassen unterstützt, indem die Attribute in eine neue doppelte Klasse dupliziert werden. Außerdem wird die unendliche Rekursion mit einem Verweis auf ein Objekt blockiert, das bereits mithilfe einer Memoliste oder eines Wörterbuchs angezeigt wird. Und das ist es wirklich, um tiefe Kopien zu machen. Im Kern werden beim Erstellen einer tiefen Kopie nur flache Kopien erstellt. Ich hoffe, diese Antwort fügt der Frage etwas hinzu.
BEISPIELE
Angenommen, Sie haben diese Liste: [1, 2, 3] . Die unveränderlichen Zahlen können nicht dupliziert werden, die andere Ebene jedoch. Sie können es mit einem Listenverständnis duplizieren: [x für x in [1, 2, 3]
Stellen Sie sich vor, Sie haben diese Liste: [[1, 2], [3, 4], [5, 6]] . Dieses Mal möchten Sie eine Funktion erstellen, die mithilfe der Rekursion alle Ebenen der Liste tief kopiert. Anstelle des vorherigen Listenverständnisses:
Es wird eine neue für Listen verwendet:
Und deepcopy_list sieht so aus:
Dann haben Sie jetzt eine Funktion, mit der Sie jede Liste von Strs, Bools, Floast, Ints und sogar Listen mithilfe der Rekursion auf unendlich viele Ebenen vertiefen können . Und da haben Sie es, Deepcopying.
TLDR : Deepcopy verwendet die Rekursion zum Duplizieren von Objekten und gibt lediglich dieselben unveränderlichen Objekte wie zuvor zurück, da unveränderliche Objekte nicht dupliziert werden können. Es kopiert jedoch die innersten Schichten veränderlicher Objekte, bis es die äußerste veränderbare Schicht eines Objekts erreicht.
quelle
Eine leichte praktische Perspektive, um durch id und gc in die Erinnerung zu schauen.
quelle
Denken Sie daran, dass in Python, wenn Sie:
List2 speichert nicht die aktuelle Liste, sondern einen Verweis auf list1. Wenn Sie also etwas mit list1 tun, ändert sich auch list2. Verwenden Sie das Kopiermodul (nicht standardmäßig, Download auf Pip), um eine Originalkopie der Liste zu erstellen (
copy.copy()
für einfache Listen,copy.deepcopy()
für verschachtelte). Dadurch wird eine Kopie erstellt, die sich mit der ersten Liste nicht ändert.quelle
Die Deepcopy-Option ist die einzige Methode, die für mich funktioniert:
führt zur Ausgabe von:
quelle
Dies liegt daran, dass die Linie
new_list = my_list
eine neue Referenz zu der Variablen zuweist ,my_list
die istnew_list
mit dem Dies ist ähnlichC
Code unten angegeben,Sie sollten das Kopiermodul verwenden, um eine neue Liste von zu erstellen
quelle