Rozdział 11 · Mnóstwo informacji!

Listy kopiowania

Kopiowanie zewnętrznego lista jest łatwe, ale listy zagnieżdżone w nim pozostają domyślnie współdzielone. Przyjrzyjmy się, dlaczego i co z tym zrobić.

Trzy Bezpieczne Sposoby Kopiowania lista

sposoby_kopirovaniya.py
original = [1, 2, 3]

kopiya_1 = original.copy()
kopiya_2 = list(original)
kopiya_3 = original[:]

kopiya_1.append(4)
print(original)   # [1, 2, 3] — nie zmieniło się
print(kopiya_1)   # [1, 2, 3, 4]

Wszystkie trzy sposoby tworzą nową ZEWNĘTRZNĄ lista. Ale co jeśli same elementy są Listy?

Powierzchowna kopia (shallow copy) to ważny niuans

shallow_copy_trap.py
original = [["Anna", 10], ["Bob", 20]]
kopiya = original.copy()

kopiya[0][1] = 999
print(original)   # [['Anna', 999], ['Bob', 20]] — również się zmieniło!
originalkopiya = original.copy()[0][0]["Anna", 10][1][1]["Bob", 20]
Dwie RÓŻNE listy zewnętrzne, ale ich elementy to TE same listy wewnętrzne
. copy() kopiuje tylko jeden poziom gnieżdżenia
.copy() (oraz list(...), i cięcie [:]) tworzą nowy zewnętrzny lista, ale nie kopiować zagnieżdżone listy w jego obrębie — pozostają one współdzielone. To się nazywa powierzchowna kopia (shallow copy). Modyfikacja podlisty poprzez kopię jest również widoczna w oryginale.

copy.deepcopy() — gdy potrzebna jest całkowicie niezależna kopia

deepcopy.py
import copy

original = [["Anna", 10], ["Bob", 20]]
polnaya_kopiya = copy.deepcopy(original)
polnaya_kopiya[0][1] = 999
print(original)   # [['Anna', 10], ['Bob', 20]] — nie zmieniło się
deepcopy nie zawsze jest poprawną odpowiedzią z definicji
copy.deepcopy() rekurencyjnie próbuje skopiować całą zagnieżdżoną strukturę w całości. Rozwiązuje to powyższy problem, ale dla dużych lub skomplikowanych struktur głębokie kopiowanie może być zauważalnie wolniejsze i nie zawsze jest potrzebne — często wystarczy skopiować tylko poziom, który faktycznie będzie się zmieniał.
Praktyka: kopiowanie list i powierzchowne kopiowanie
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →