Kopiowanie obiektów w Pythonie to podstawowa umiejętność, która jest niezbędna w wielu scenariuszach programowania. Python oferuje różne sposoby kopiowania obiektów, w zależności od tego, czy potrzebujemy płytkiej czy głębokiej kopii. Zrozumienie różnicy między tymi dwoma typami kopii i kiedy ich używać, jest kluczowe dla efektywnego i poprawnego zarządzania danymi w aplikacjach.
Przykład kodu z wyjaśnieniami
W poniższym przykładzie przedstawiono, jak skopiować listę (jako przykład obiektu) w Pythonie, używając zarówno płytkiej kopii (copy()
) jak i głębokiej kopii (deepcopy()
).
import copy # Import potrzebny do używania deepcopy
# Tworzenie oryginalnej listy
original_list = [1, 2, [3, 4], 5]
# Płytkie kopiowanie listy
shallow_copied_list = original_list.copy()
# Głębokie kopiowanie listy
deep_copied_list = copy.deepcopy(original_list)
# Modyfikacja oryginalnej listy
original_list[2][0] = "zmieniono"
# Wyświetlenie list po modyfikacji oryginalnej listy
print("Oryginalna lista:", original_list)
# Płytko skopiowana lista będzie miała zmienione wewnętrzne
# elementy, ponieważ kopia jest płytką kopią.
print("Płytko skopiowana lista:", shallow_copied_list)
# Głęboko skopiowana lista nie odzwierciedli zmian
# w oryginalnej liście, ponieważ jest to głęboka kopia.
print("Głęboko skopiowana lista:", deep_copied_list)
Wyjaśnienie
- Płytkie kopiowanie (
shallow copy
): tworzy nowy obiekt, ale nie kopiuje obiektów, do których odnosi się oryginalny obiekt. Zamiast tego, w nowym obiekcie umieszcza referencje do tych samych obiektów. W przykładzie, modyfikacjaoriginal_list
wpłynęła nashallow_copied_list
, ponieważ zawierały one referencje do tego samego wewnętrznego obiektu listy. - Głębokie kopiowanie (
deep copy
): tworzy nowy obiekt oraz rekursywnie kopiuje wszystkie obiekty, do których odnosi się oryginalny obiekt. Zmiany w oryginalnym obiekcie nie wpłyną na kopię. W przykładzie,deep_copied_list
pozostała niezmieniona po modyfikacjioriginal_list
.
Podsumowanie
Rozumienie różnicy między płytkim a głębokim kopiowaniem jest istotne podczas pracy z złożonymi strukturami danych w Pythonie. Wybór odpowiedniego typu kopiowania zależy od konkretnego przypadku użycia i oczekiwanej niezależności między oryginalnymi i skopiowanymi obiektami.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs Python od podstaw w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.