logo

Przekaż referencję vs wartość w Pythonie

Programiści rozpoczynający naukę programowania w Pythonie z innych języków, takich jak C++ i Java, często są zdezorientowani procesem przekazywania argumentów w Pythonie. Obiektocentryczny model danych i sposób jego podejścia do przypisania są przyczyną zamieszania na poziomie podstawowym.

W artykule omówimy koncepcję jak przekazać wartość przez referencję w Pythonie I spróbuj zrozumieć przykłady przekazywania przez referencje w Pythonie.

Spis treści



Przekaż przez wartość i przekaż przez referencję w Pythonie

Po przeczytaniu dalej możesz chcieć w coś uderzyć, więc przygotuj się. Model przekazywania argumentów w Pythonie to: ani Przekaż przez wartość, ani Przekaż przez odniesienie, ale jest to Przekaż przez odniesienie do obiektu.

W zależności od typu obiektu przekazywanego w funkcji funkcja zachowuje się inaczej. Obiekty niezmienne pokazują przekazywanie przez wartość, podczas gdy obiekty zmienne pokazują przekazywanie przez referencję.

W poniższym przykładzie możesz sprawdzić różnicę między przekazywaniem wartości a przekazywaniem przez odwołanie:

nazwy miast usa

Python3




def> call_by_value(x):> >x>=> x>*> 2> >print>(>'in function value updated to'>, x)> >return> > def> call_by_reference(>list>):> >list>.append(>'D'>)> >print>(>'in function list updated to'>,>list>)> >return> > my_list>=> [>'E'>]> num>=> 6> print>(>'number before='>, num)> call_by_value(num)> print>(>'after function num value='>, num)> print>(>'list before'>,my_list)> call_by_reference(my_list)> print>(>'after function list is '>,my_list)>

>

>

Wyjście

  number before= 6    in function value updated to 12    after function num value= 6    list before ['E']    in function list updated to ['E', 'D']    after function list is ['E', 'D']>

W powyższym kodzie pokazaliśmy, jak Python wykorzystuje w swoim programie koncepcję obiektu wywołania przez referencję.

Przekazujemy liczbę całkowitą w funkcji call_by_value(). Liczby całkowite są obiektami niezmiennymi, dlatego Python działa według wywołania według wartości, a zmiany dokonane w funkcji nie są odzwierciedlane poza funkcją.

Następnie przekazujemy listę do funkcji poprzez referencję. W funkcji call_by_reference() przekazujemy listę będącą obiektem zmiennym. W tej funkcji Python działa w oparciu o wywołanie przez referencję, a zmiany dokonane wewnątrz funkcji można zobaczyć także poza nią.

Zmienna nie jest obiektem

Tutaj a jest zmienną wskazującą listę zawierającą elementy X i Y. Ale samo w sobie nie jest listą. Rozważmy, że a jest wiadrom zawierającym obiekty X i Y.

 a = ['X', 'Y']>

wstaw znak wodny w słowie

Co to jest przekazywanie przez referencję w Pythonie?

Przekazanie przez referencję oznacza, że ​​trzeba przekazać funkcję (odniesienie) do zmiennej, co oznacza, że ​​zmienna już istnieje w pamięci.

Tutaj zmienna (wiadro) jest przekazywana bezpośrednio do funkcji. Zmienna działa jak pakiet dostarczany z zawartością (obiektami).

Na powyższym obrazie kodu zarówno lista, jak i moja_lista są tą samą zmienną kontenerową i dlatego odnoszą się do tego samego obiektu w pamięci. Każda operacja wykonana przez funkcję na zmiennej lub obiekcie zostanie bezpośrednio odzwierciedlona przez osobę wywołującą funkcję. Na przykład funkcja może całkowicie zmienić zawartość zmiennej i skierować ją na zupełnie inny obiekt:

wyłączanie trybu programisty Androida

Ponadto funkcja może ponownie przypisać zawartość zmiennej z takim samym skutkiem jak poniżej:

Podsumowując, w przypadku przekazywania przez odwołanie funkcja i obiekt wywołujący używają tej samej zmiennej i obiektu.

Przekaż referencję w przykładzie Pythona

W tym przykładzie funkcja modyfikacji_list pobiera listę przez odniesienie. Funkcja dodaje ciąg Geeks do przekazanej listy wewnątrz funkcji i wyświetla ją. Ponieważ listy są zmiennymi typami danych, zmiany wprowadzone na liście wewnątrz funkcji są również odzwierciedlane poza funkcją, jak widać w wynikach.

Python3




def> modify_list(x):> >x.append(>'Geeks'>)> >print>(>'Inside function:'>, x)> > my_list>=> [>'Geeks'>,>'for'>]> modify_list(my_list)> print>(>'Outside function:'>, my_list)>

>

>

Wyjście

  Inside function: ['Geeks', 'for', 'Geeks']    Outside function: ['Geeks', 'for', 'Geeks']>

Co to jest przekazywanie wartości w Pythonie?

W tym podejściu przekazujemy kopię the aktualne zmienne w funkcji jako parametr. Dlatego jakakolwiek modyfikacja parametrów wewnątrz funkcji nie będzie odzwierciedlana w rzeczywistej zmiennej.

algorytmy wyszukiwania

To samo dotyczy każdej operacji wykonywanej przez funkcję na zmiennej lub obiekcie

Podsumowując, kopie zmiennych i obiektów w kontekście wywołującego funkcję są całkowicie izolowane.

Przekaż wartość w przykładzie Pythona

Tutaj przekażemy liczbę całkowitą x do funkcji, która jest niezmiennym typem danych. Następnie aktualizujemy wartość liczby całkowitej wewnątrz funkcji i drukujemy zaktualizowaną wartość. Zmiany nie są widoczne poza funkcją, ponieważ liczby całkowite są niezmiennymi typami danych.

Python3




def> modify_integer(x):> >x>=> x>+> 10> >print>(>'Inside function:'>, x)> > x>=> 5> print>(>'Before function call:'>, x)> modify_integer(x)> print>(>'After function call:'>, x)>

>

równość obiektów Java
>

Wyjście:

  Before function call: 5    Inside function: 15    After function call: 5>

Programowanie w języku Python wykorzystuje koncepcję obiektu referencyjnego podczas przekazywania wartości do funkcji. W tym artykule podjęto próbę przedstawienia koncepcji przekazywania przez wartość i przekazywania przez referencję w Pythonie. Na przykładach pokazaliśmy różne przypadki przekazywania wartości. Przekazywanie wartości do funkcji w Pythonie różni się od innych języków programowania, ale dzięki temu samouczkowi możesz łatwo zrozumieć tę koncepcję i wdrożyć ją w swojej pracy.

Przeczytaj także:

Czy Python jest wywołaniem przez referencję, czy przez wartość