Pass av referanse vs verdi i Python

Pass av referanse vs verdi i Python

Utviklere som hopper inn i Python-programmering fra andre språk som C++ og Java blir ofte forvirret av prosessen med å sende argumenter i Python. Den objektsentriske datamodellen og dens behandling av oppdrag er årsakene til forvirringen på det grunnleggende nivået.

I artikkelen vil vi diskutere begrepet hvordan sende en verdi ved referanse i Python og prøv å forstå forbigående referanseeksempler i Python.

Innholdsfortegnelse

Pass by Value og Pass by Reference i Python

Du vil kanskje slå noe etter å ha lest videre, så gjør deg klar. Pythons argumentovergangsmodell er verken Pass by Value eller Pass by Reference, men det er Pass by Object Reference.

Avhengig av typen objekt du sender i funksjonen, oppfører funksjonen seg annerledes. Uforanderlige objekter viser pass by-verdi, mens mutbare objekter viser pass by referanse.

Du kan sjekke forskjellen mellom pass-by-value og pass-by-referanse i eksemplet nedenfor:

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)>

Produksjon

  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'] 

I koden ovenfor har vi vist hvordan Python bruker call by reference objektkonsept i programmet sitt.

Vi sender et heltall i funksjonen call_by_value(). Heltall er uforanderlige objekter, derfor fungerer Python i henhold til kall etter verdi, og endringene som er gjort i funksjonen reflekteres ikke utenfor funksjonen.

Vi sender deretter listen til funksjon ved referanse. I funksjonen call_by_reference() sender vi en liste som er et muterbart objekt. Python fungerer i henhold til call by reference i denne funksjonen og endringene som er gjort inne i funksjonen kan også sees utenfor funksjonen.

Variabelen er ikke objektet

Her er a en variabel som peker til en liste som inneholder elementene X og Y. Men a selv er ikke en liste. Betrakt a som en bøtte som inneholder objektet X og Y.

 a = ['X', 'Y'] 

Hva er Pass by Reference i Python?

Pass by reference betyr at du må sende funksjonen (referansen) til en variabel, som betyr at variabelen allerede finnes i minnet.

Her sendes variabelen (bøtten) direkte inn i funksjonen. Variabelen fungerer som en pakke som følger med innholdet (objektene).

I kodebildet ovenfor er både list og my_list den samme containervariabelen og refererer derfor til det samme objektet i minnet. Enhver operasjon utført av funksjonen på variabelen eller objektet vil bli direkte reflektert av funksjonsanroperen. For eksempel kan funksjonen endre variabelens innhold fullstendig og peke den mot et helt annet objekt:

Funksjonen kan også tilordne innholdet i variabelen på nytt med samme effekt som nedenfor:

For å oppsummere, i pass-by-referanse, bruker funksjonen og anroperen samme variabel og objekt.

Pass ved referanse i Python-eksempel

I dette eksemplet tar funksjonen modify_list en liste ved referanse. Funksjonen legger til strengen Geeks til den beståtte listen inne i funksjonen og skriver den ut. Siden lister er mutbare datatyper, reflekteres endringene som er gjort i listen inne i funksjonen også utenfor funksjonen som du kan se i utdataene.

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)>

Produksjon

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

Hva er Pass by Value i Python?

I denne tilnærmingen sender vi en kopi av de faktiske variabler i funksjonen som en parameter. Derfor vil ingen modifikasjon av parametere inne i funksjonen reflekteres i den faktiske variabelen.

Det samme gjelder for enhver operasjon utført av funksjonen på variabelen eller objektet

For å oppsummere er kopiene av variablene og objektene i konteksten til den som kaller funksjonen fullstendig isolert.

Pass av verdi i Python-eksempel

Her vil vi sende heltall x til funksjonen som er en uforanderlig datatype. Vi oppdaterer så verdien av heltallet inne i funksjonen og skriver ut den oppdaterte verdien. Endringene sees ikke utenfor funksjonen da heltall er uforanderlige datatyper.

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)>

Produksjon:

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

Python-programmering bruker pass by reference-objektkonsept mens den overfører verdier til funksjonene. Denne artikkelen prøver å vise deg konseptet pass by value og pass by reference i Python. Vi har vist forskjellige tilfeller av bestått verdier med eksempler. Å sende verdier til en funksjon i Python er forskjellig fra andre kodespråk, men med denne opplæringen kan du enkelt forstå konseptet og implementere det i arbeidet ditt.

Les også:

Er Python kall ved referanse eller kall etter verdi