Heim >Backend-Entwicklung >Python-Tutorial >Wie klont man Listen in Python richtig und vermeidet unerwartete Änderungen?
Geklonte Listen: Wahrung der Integrität in Python
In Python wird durch die Zuweisung einer neuen Variablen zu einer vorhandenen Liste eine flache Kopie erstellt, die Sie anfällig macht zu unerwarteten Listenänderungen führen. Lassen Sie uns beleuchten, warum dieses Verhalten auftritt, und effektive Klonmethoden untersuchen, um die Unveränderlichkeit der Liste sicherzustellen.
Warum Zuweisung nicht zum Klonen führt:
Wenn Sie new_list = ausführen my_list weisen Sie new_list einen Zeiger auf dasselbe Listenobjekt zu. Beide Variablen beziehen sich auf die ursprüngliche Liste und machen alle nachfolgenden Änderungen sowohl in new_list als auch in my_list sichtbar.
Die Liste effektiv kopieren:
Um einen echten Klon zu erstellen, müssen Sie Folgendes tun mehrere Ansätze:
1. Mit list.copy():
Diese in Python 3.3 eingeführte Methode erstellt eine eindeutige Kopie der Liste.
**2. Aufteilen der Liste mit [:]:**
Diese Syntax erstellt eine neue Liste mit denselben Elementen wie das Original.
3. Verwendung des Listenkonstruktors (list()):
Dadurch wird eine neue Liste aus einer vorhandenen iterierbaren Liste erstellt, beispielsweise einer anderen Liste.
4. Verwenden von copy.copy():
Diese integrierte Funktion stellt eine einfache flache Kopie bereit, die für die meisten Anwendungsfälle ausreichend ist.
5. Mit copy.deepcopy():
Diese umfassendere Methode erstellt eine tiefe Kopie, in der auch verschachtelte Objekte geklont werden.
Beispiel:
Vergleichen wir die Ergebnisse Methoden:
import copy my_list = ['foo', 'bar'] new_list = my_list.copy() sliced_list = my_list[:] list_constructor_list = list(my_list) shallow_copy_list = copy.copy(my_list) deep_copy_list = copy.deepcopy(my_list) my_list.append('baz') print(f'Original list: {my_list}') print(f'Copied list: {new_list}') print(f'Sliced list: {sliced_list}') print(f'List constructed from iterator: {list_constructor_list}') print(f'Shallow copy: {shallow_copy_list}') print(f'Deep copy: {deep_copy_list}')
Ausgabe:
Original list: ['foo', 'bar', 'baz'] Copied list: ['foo', 'bar'] Sliced list: ['foo', 'bar'] List constructed from iterator: ['foo', 'bar'] Shallow copy: ['foo', 'bar'] Deep copy: ['foo', 'bar']
Wie aus der Ausgabe hervorgeht, wird my_list nach dem Anhängen von „baz“ geändert, während die geklonten Listen unverändert bleiben.
Das obige ist der detaillierte Inhalt vonWie klont man Listen in Python richtig und vermeidet unerwartete Änderungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!