Erstellen einer unveränderlichen Listenkopie
In Python wirken sich Änderungen an new_list beim Zuweisen von Listenreferenzen wie new_list = my_list überraschenderweise auf my_list aus. Dies liegt daran, dass Python nicht eine eindeutige neue Liste erstellt, sondern lediglich den Verweis auf die tatsächliche Liste kopiert, was dazu führt, dass sowohl new_list als auch my_list auf dieselbe Liste verweisen.
Um dieses Problem zu beheben und unerwartete Änderungen zu verhindern, ist es wichtig, Folgendes zu tun Erstellen Sie mit verschiedenen Methoden eine echte Kopie der Liste.
Klonen einer Liste
Um eine unveränderliche zu erhalten Wenn Sie eine Liste klonen oder eine flache Kopie erstellen möchten, berücksichtigen Sie die folgenden Optionen:
new_list = old_list.copy()
new_list = old_list[:]
new_list = list(old_list)
Deep Copying einer Liste
Wenn Sie auch die Elemente der Liste kopieren müssen, verwenden Sie deep Kopieren:
import copy new_list = copy.deepcopy(old_list)
Beispiel
Betrachten Sie den folgenden Code:
import copy class Foo: def __init__(self, val): self.val = val def __repr__(self): return f'Foo({self.val!r})' 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(f'original: {a}\nlist.copy(): {b}\nslice: {c}\nlist(): {d}\ncopy: {e}\ndeepcopy: {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)]
Dies zeigt, wie sich Änderungen an der Originalliste und ihren Instanzen nur auf die Originalliste und nicht auf deren Originalliste auswirken kopierte Versionen (b, c, d und f).
Das obige ist der detaillierte Inhalt vonWie kann ich eine unveränderliche Kopie einer Liste in Python erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!