Python stöder passera efter objektreferens
Pass-by-reference och pass-by-value är onekligen de två mest välkända och lättförståeliga sätten att parametrar passera mellan programmeringsspråk. Python är tyvärr 'pass-by-object-reference', varken "Pass by Value" eller "Pass by Reference", ofta benämnt "Call by Object Reference" samt "Call by Sharing".”Det är användbart att titta närmare på själva konceptet genom att dela upp det i segment medan du kastar dig in i de tekniska detaljerna för att passera förbi Referens:
Passera: detta innebär att förse en metod med ett argument.
Genom hänvisning: det betyder att argumentet du flyttar över till metoden hänvisar till en variabel som nu finns i lagring istället för en annan replik av den variabeln.
När du tilldelar metoden en referens till en definierad variabel påverkas variabeln den motsvarar uttryckligen av alla operationer i denna referens. Låt oss nu överväga ett exempel på hur detta i praktiken fungerar. I det här exemplet har vi definierat en variabel 'arg ' med ett värde på 4. Under hela detta scenario är variabeln 'arg ' ändrades inte i stället. Python verkar hantera ditt tillhandahållna argument istället för en hänvisning till en nuvarande variabel som ett fristående värde.
Skulle detta innebära att istället för genom referens flyttar Python argument efter värde? Python flyttar argument genom tilldelning, så varken genom referens eller med värde. Logiken för detta är dubbelt:
För närvarande är parametern som skickas in en pekare till ett objekt. Vissa typer av data är muterbara och vissa är inte muterbara.
Om vi flyttar ett föränderligt objekt till en funktion, får funktionen en hänvisning till samma objekt så att du kan mutera allt till din själs tillfredsställelse; dock skulle det externa omfånget inte veta någonting innan du återförenar referensen i funktionen. När du är klar, riktar den externa referensen bara mot det faktiska objektet. Om du flyttar ett oföränderligt objekt till en funktion kan den externa referensen alltid inte bindas om, och du kan inte bara mutera objektet. För att göra saker mycket enklare, låt oss förstå en efter en.
Gå förbi referens
Först och främst måste du förstå att variabeln 'min lista' i sig inte är en lista utan hänvisar till en lista med värden. Du kan kalla variabeln 'min lista' en behållare med värden inom den. Listvärdena är objekt. Variabeln 'mylist' har levererats direkt till funktionen med dess innehåll.
Både "lista" och "min lista" verkar vara samma lagringsvariabler i kodexemplet nedan och gäller således samma lagringsobjekt. Det är därför det skrivs ut 'Saeed vid utskrift.''
Alla åtgärder som görs på variabeln eller enheten speglas omedelbart till uppringningsmetoden. Metoden kan helt ändra värdet på variabeln och rikta den mot ett helt distinkt objekt. Som du kan se i funktionen 'set_list' har vi ändrat listinnehållet och skrivit ut en helt ny lista med elementet 'Aqsa.'Detta beror på att vi har returnerat den modifierade listan och skrivit ut den på samma rad som den som ringer.
Metoden kan också omfördela variabelns element för samma resultat som nedan. Du kan se att vi har lagt till ett nytt värde i listan och ändringen har återspeglats. Vi har lagt till en unik sträng i en lista och returnerat den till den som ringer. Avslutningsvis har metoden och den som ringer använt samma variabel och objekt under hela förbipasseringsrelationen.
Gå förbi värde
Genom pass by value levereras metoden med ett duplikat av argumentobjektet som den som ringer tilldelar det. Detta säkerställer att det ursprungliga objektet förblir oförändrat och alla ändringar som gjorts behålls på separata minnesplatser i en kopia av samma objekt.
Det är lika giltigt för alla operationer som utförs på en variabel eller enheten enligt metoden. Dubbletter av variabler och objekt i uppringningsmetodens omfång är helt separerade för att sammanfatta dem.
Skicka objekt enligt referens
Under hela denna situation, eftersom Python är distinkt, får Pythons metoder den mycket liknande objektreferensen i lagringen som den som ringer till. Omvänt erhåller inte tekniken variabeln 'mylist' (behållaren). Uppringningsmetoden lagrar samma objekt; metoden genererar en behållare och genererar ett helt nytt index för sin egen, precis som i förbigående värde.
Den som ringer och metoden talar om samma objekt i lagringen, men när den bifogade metoden tillämpar ett externt objekt i en lista, ändras den som ringer. De har flera etiketter, men de är samma saker. Båda variablerna har ett mycket liknande objekt. Det är känslan bakom dess förhållande till rörelsen av objektet. I lagringen använder metoden och den som ringer ett liknande objekt men fångar dem genom flera variabler. Uppringningsvariabeln (behållaren) kommer inte att ändras genom några modifieringar av metodvariabeln (behållaren); endast data eller innehållet ändras.
Slutsats
Python fungerar oberoende av språk som accepterar flyttning av referens eller värde för argument. Metodargument är lokala variabler som har allokerats till varje värde som överförs till metoden. Men det hindrar dig fortfarande inte från att få samma resultat som du skulle hitta på andra språk när du flyttar argument per proxy.