Jak są przekazywane argumenty w Pythonie – przez referencję czy przez wartość?

Wstęp do tematu często wywołuje pewien stopień zamieszania, ponieważ sposób, w jaki Python przekazuje argumenty do funkcji, może wydawać się na pierwszy rzut oka nieco niejasny. Czy są one przekazywane przez referencję, czy może przez wartość? Aby wyjaśnić tę kwestię, przyjrzyjmy się bliżej, jak Python obsługuje argumenty funkcji.

Przykład kodu w Pythonie

Rozważmy poniższy kod, aby zilustrować, jak Python przekazuje argumenty:

def modify_elements(list):
    # Modyfikacja elementów listy w funkcji
    list.append(4)
    list[0] = -1

def replace_list(list):
    # Próba zastąpienia całej listy
    list = [10, 11, 12]

# Tworzenie listy i modyfikacja za pomocą funkcji
original_list = [1, 2, 3]
modify_elements(original_list)
print("Po modyfikacji elementów:", original_list)

# Próba zastąpienia listy
replace_list(original_list)
print("Po próbie zastąpienia listy:", original_list)

W powyższym przykładzie funkcja modify_elements modyfikuje przekazaną listę, dodając do niej element oraz zmieniając jeden z istniejących elementów. Natomiast funkcja replace_list próbuje zastąpić całą listę nową. Po wywołaniu obu funkcji i wyświetleniu listy widać, że modyfikacje elementów listy zostały zachowane, ale próba zastąpienia całej listy nową nie powiodła się.

Przekazywanie przez “coś na kształt referencji”

Python stosuje model przekazywania argumentów, który jest często opisywany jako “przekazywanie przez wartość referencji” lub “przekazywanie przez obiekt”. Oznacza to, że funkcje otrzymują referencję do tego samego obiektu w pamięci, nie jego kopię. W przypadku modyfikowalnych obiektów, takich jak listy, zmiany dokonane w funkcji będą miały wpływ na ten sam obiekt poza funkcją.

Jednak ważne jest, aby zrozumieć, że jeśli w funkcji przypiszemy nową wartość do argumentu (jak w funkcji replace_list), wówczas ta nowa wartość nie zostanie odzwierciedlona poza funkcją. Dzieje się tak, ponieważ przypisanie nowej wartości do zmiennej wewnątrz funkcji tworzy referencję do nowego obiektu w lokalnym zakresie funkcji, nie modyfikując obiektu poza nią.

Podsumowanie

W Pythonie argumenty są przekazywane do funkcji przez coś, co można by nazwać “przekazywaniem przez obiekt” lub “przekazywaniem przez wartość referencji”. Oznacza to, że funkcje pracują na oryginalnych obiektach, a nie ich kopiach, co pozwala na modyfikację modyfikowalnych obiektów wewnątrz funkcji. Jednak przypisanie nowej wartości do argumentu funkcji tworzy referencję do nowego obiektu w lokalnym zakresie funkcji, nie zmieniając obiektu poza nią. To rozróżnienie jest kluczowe dla zrozumienia, jak Python obsługuje przekazywanie argumentów i ma istotne implikacje dla projektowania i debugowania kodu.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Python w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top