logo

Passera referens vs värde i Python

Utvecklare som hoppar in i Python-programmering från andra språk som C++ och Java blir ofta förvirrade av processen att skicka argument i Python. Den objektcentrerade datamodellen och dess behandling av uppdrag är orsakerna till förvirringen på den grundläggande nivån.

I artikeln kommer vi att diskutera begreppet hur man skickar ett värde genom referens i Python och Försök att förstå exempel på förbigående referens i Python.

Innehållsförteckning



Pass by Value och Pass by Reference i Python

Du kanske vill slå något efter att ha läst vidare, så håll dig beredd. Pythons argument-passerande modell är varken Pass by Value eller Pass by Reference utan det är Pass by Object Reference.

Beroende på vilken typ av objekt du skickar i funktionen beter sig funktionen olika. Oföränderliga objekt visar pass by value medan muterbara objekt visar pass by reference.

Du kan kontrollera skillnaden mellan pass-by-value och pass-by-referens i exemplet nedan:

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

>

>

Produktion

  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 ovanstående kod har vi visat hur Python använder call by reference-objektkonceptet i sitt program.

Vi skickar ett heltal i funktionen call_by_value(). Heltal är oföränderliga objekt, därför fungerar Python enligt call by value, och ändringarna som görs i funktionen reflekteras inte utanför funktionen.

Vi skickar sedan listan till funktion genom referens. I funktionen call_by_reference() skickar vi en lista som är ett föränderligt objekt. Python fungerar enligt call by reference i denna funktion och ändringarna som görs inuti funktionen kan också ses utanför funktionen.

Variabeln är inte objektet

Här är a en variabel som pekar på en lista som innehåller elementen X och Y. Men a i sig är inte en lista. Betrakta a vara en hink som innehåller objekten X och Y.

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

Vad är Pass by Reference i Python?

Pass by reference innebär att du måste skicka funktionen (referens) till en variabel, vilket innebär att variabeln redan finns i minnet.

Här skickas variabeln (hinken) direkt till funktionen. Variabeln fungerar som ett paket som kommer med dess innehåll (objekten).

I kodbilden ovan är både list och my_list samma containervariabel och hänvisar därför till samma objekt i minnet. Varje operation som utförs av funktionen på variabeln eller objektet kommer att reflekteras direkt av funktionsanroparen. Till exempel kan funktionen helt ändra variabelns innehåll och rikta den mot ett helt annat objekt:

Funktionen kan också omfördela innehållet i variabeln med samma effekt som nedan:

För att sammanfatta, i pass-by-referens, använder funktionen och anroparen samma variabel och objekt.

Passera referens i Python-exempel

I det här exemplet tar funktionen modify_list en lista genom referens. Funktionen lägger till strängen Geeks till den godkända listan inuti funktionen och skriver ut den. Eftersom listor är föränderliga datatyper, återspeglas ändringarna som görs i listan inuti funktionen även utanför funktionen som du kan se i utdata.

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

>

>

Produktion

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

Vad är Pass by Value i Python?

I detta tillvägagångssätt skickar vi en kopia av de faktiska variabler i funktionen som parameter. Därför kommer alla ändringar av parametrar inuti funktionen inte att återspeglas i den faktiska variabeln.

Detsamma gäller för alla operationer som utförs av funktionen på variabeln eller objektet

För att sammanfatta är kopiorna av variablerna och objekten i sammanhanget för den som anropar funktionen helt isolerade.

Passera värde i Python-exempel

Här kommer vi att skicka heltal x till funktionen som är en oföränderlig datatyp. Vi uppdaterar sedan värdet på heltal inuti funktionen och skriver ut det uppdaterade värdet. Ändringarna ses inte utanför funktionen eftersom heltal är oföränderliga 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)>

>

>

hur man skriver ut java

Produktion:

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

Python-programmering använder begreppet pass by-referensobjekt samtidigt som värden skickas till funktionerna. Den här artikeln försöker visa dig begreppet pass by value och pass by reference i Python. Vi har visat olika fall av godkända värden med exempel. Att skicka värden till en funktion i Python skiljer sig från andra kodningsspråk, men med denna handledning kan du enkelt förstå konceptet och implementera det i ditt arbete.

Läs också:

Är Python call by reference eller call by value