Читать книгу Routineaufgaben mit Python automatisieren - Al Sweigart - Страница 137

Die Funktionen copy() und deepcopy() des Moduls copy

Оглавление

Verweise zu übergeben ist oft die sinnvollste Vorgehensweise, wenn eine Funktion tatsächlich die übergebene Liste oder das Dictionary bearbeiten soll. Es kann jedoch auch vorkommen, dass Sie die ursprüngliche Liste bzw. das Dictionary nicht ändern wollen. Für diesen Fall stellt Python das Modul copy bereit, das die Funktionen copy() und deepcopy() enthält. Mit copy.copy() können Sie eine echte Kopie eines veränderbaren Wertes wie einer Liste oder eines Dictionarys erstellen, also nicht einfach nur eine Kopie des Verweises darauf. Geben Sie folgenden Code in die interaktive Shell ein:

>>> import copy

>>> spam = ['A', 'B', 'C', 'D']

>>> id(spam)

57205555

>>> cheese = copy.copy(spam)

>>> id(cheese) # cheese ist eine andere Liste mit eigener Identität

57208888

>>> cheese[1] = 42

>>> spam

['A', 'B', 'C', 'D']

>>> cheese

['A', 42, 'C', 'D']

Hier verweisen die Variablen spam und cheese auf zwei unterschiedliche Listen, weshalb bei der Zuweisung von 42 zum Index 1 ausschließlich die Liste in cheese geändert wird. Wie Abb. 4–7 zeigt, verwenden die beiden Variablen nicht mehr dieselbe ID-Nummer, da sie nun auf verschiedene Listen verweisen.

Abb. 4–7cheese = copy.copy(spam) erstellt eine zweite Liste, die unabhängig von der ersten bearbeitet werden kann.

Wenn die Liste, die Sie kopieren wollen, selbst Listen enthält, verwenden Sie anstelle von copy.copy() die Funktion copy.deepcopy(). Damit werden auch die verschachtelten Listen kopiert.

Routineaufgaben mit Python automatisieren

Подняться наверх