Jak skopiować obiekt w Pythonie?

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, modyfikacja original_list wpłynęła na shallow_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 modyfikacji original_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.

Scroll to Top