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
Mary-Kate OlsenOriginal
2024-12-24 03:37:14770Durchsuche

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()
  • Liste Slicing:
new_list = old_list[:]
  • list() Konstruktor:
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!

Stellungnahme:
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