Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich eine unveränderliche Kopie einer Liste in Python erstellen?

Wie kann ich eine unveränderliche Kopie einer Liste in Python erstellen?

Mary-Kate Olsen
Freigeben: 2024-12-24 03:37:14
Original
765 Leute haben es durchsucht

How Can I Create an Immutable Copy of a List in Python?

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:

  • list.copy() Methode (Python 3.3):
new_list = old_list.copy()
Nach dem Login kopieren
  • Liste Slicing:
new_list = old_list[:]
Nach dem Login kopieren
  • list() Konstruktor:
new_list = list(old_list)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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}')
Nach dem Login kopieren

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)]
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage