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

Rozumienie sposobu, w jaki Python przekazuje argumenty do funkcji, jest kluczowe dla efektywnego i bezbłędnego kodowania. Pytanie, czy argumenty są przekazywane przez referencję czy przez wartość, może wydawać się proste, ale w Pythonie odpowiedź jest nieco bardziej złożona. Zapraszam do wnikliwej analizy tego tematu.

Kompleksowy przykład

W Pythonie argumenty są przekazywane przez przypisanie. W praktyce oznacza to, że zachowanie zależy od tego, czy przekazujemy obiekt niezmienne (takie jak liczby całkowite, krotki, łańcuchy znaków) czy zmienne (np. listy, słowniki).

# Definicja funkcji modyfikującej listę
def modify_list(lst):
    # Dodajemy element do listy - modyfikacja "w miejscu"
    lst.append(100)
    print("Wewnątrz funkcji:", lst)

# Definicja funkcji próbującej zmodyfikować wartość całkowitą
def modify_number(n):
    # Próbujemy zmodyfikować wartość
    n += 100
    print("Wewnątrz funkcji:", n)

# Przykładowa lista - obiekt zmienny
my_list = [1, 2, 3]
print("Przed wywołaniem funkcji:", my_list)
modify_list(my_list)
print("Po wywołaniu funkcji:", my_list)

# Przykładowa liczba całkowita - obiekt niezmienny
my_number = 10
print("\nPrzed wywołaniem funkcji:", my_number)
modify_number(my_number)
print("Po wywołaniu funkcji:", my_number)

Analiza

  • W przypadku listy (obiektu zmiennego) widzimy, że zmiany dokonane w funkcji modify_list są widoczne poza funkcją. Oznacza to, że lista jest przekazywana przez referencję, co umożliwia modyfikację oryginalnego obiektu.
  • W przypadku liczby całkowitej (obiektu niezmiennego) zmiana wartości w funkcji modify_number nie wpływa na oryginalną zmienną poza funkcją. Wartość jest przekazywana przez wartość, co oznacza, że funkcja działa na kopii, nie na oryginalnym obiekcie.

Podsumowanie

W Pythonie sposób przekazywania argumentów nie zależy bezpośrednio od mechanizmu przez referencję czy przez wartość, ale od mutowalności obiektów. Niezmienne typy danych są w praktyce przekazywane przez wartość (jako kopie), natomiast zmienne typy danych przez referencję (jako odniesienia do oryginalnych obiektów). Kluczowe jest zrozumienie tej różnicy, by skutecznie zarządzać stanem danych w programach Pythona.

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