Passa per riferimento e valore in Python

Pass Reference Vs



Dopo aver conosciuto Python, puoi trovare casi in cui le funzioni non alterano gli argomenti in un punto come ti aspetteresti, in particolare se conosci molti altri linguaggi per computer. Molti linguaggi utilizzano gli argomenti del metodo come riferimenti, definiti come passaggio per Riferimento alle variabili correnti. Se sei uno sviluppatore Python avanzato che vuole comprendere il modo particolare di Python di trattare gli argomenti del metodo, allora questa guida è davvero per te.

Python supporta il passaggio per oggetto di riferimento

Pass-by-reference e pass-by-value sono innegabilmente i due modi più riconosciuti e facilmente comprensibili per il passaggio di parametri tra i linguaggi di programmazione. Python è, purtroppo, 'pass-by-object-reference', né Pass by Value né Pass by Reference, spesso definito come Call by Object Reference e Call by Sharing. È utile esaminare più da vicino il concetto stesso suddividendolo in segmenti mentre ti immergi nelle specifiche tecniche del passaggio per Riferimento:







Passaggio: questo significa fornire un metodo con un argomento.



Come riferimento: ciò significa che l'argomento spostato sul metodo fa riferimento a una variabile che ora risiede nella memoria anziché a una replica diversa di quella variabile.



Quando assegni al metodo un riferimento a una variabile definita, la variabile a cui corrisponde sarebbe esplicitamente influenzata da tutte le operazioni su questo riferimento. Consideriamo ora un esempio di come, in pratica, funziona. In questo esempio, abbiamo definito una variabile ' arrabbiato' avente un valore di 4 . In tutto questo scenario, la variabile ' arrabbiato' non è stato modificato al suo posto. Python sembra gestire l'argomento fornito invece di un riferimento a una variabile presente come valore autonomo.





Ciò significherebbe che invece di riferimento, Python sposta gli argomenti per valore? Python sposta gli argomenti attraverso l'assegnazione, quindi né per riferimento né con valore. La logica per questo è duplice:



Attualmente, il parametro che passa è un puntatore a un oggetto. Alcuni tipi di dati sono modificabili e alcuni non lo sono.

Se spostiamo un oggetto mutabile in una funzione, la funzione acquisisce un riferimento allo stesso oggetto in modo che tu possa mutarlo tutto con soddisfazione della tua anima; tuttavia, l'ambito esterno non saprebbe nulla prima di ricongiungersi al riferimento nella funzione. Una volta terminato, il riferimento esterno mirerà solo all'oggetto reale. Se sposti un oggetto immutabile su una funzione, il riferimento esterno non può sempre essere ricollegato e non puoi semplicemente mutare l'oggetto. Per rendere le cose molto più semplici, capiamo uno per uno.

Passa per riferimento

Prima di tutto, devi capire che la variabile 'mylist' non è una lista ma si riferisce a una lista con valori. Puoi chiamare la variabile 'mylist' un contenitore con valori al suo interno. I valori dell'elenco sono oggetti. La variabile 'mylist' è stata consegnata direttamente alla funzione con i suoi contenuti.

Sia l'elenco che il mio elenco sembrano essere la stessa variabile di archiviazione nell'esempio di codice seguente e quindi si applicano allo stesso oggetto di archiviazione. Ecco perché in uscita stampa 'Saeed'.

Qualsiasi azione eseguita sulla variabile o sull'entità verrebbe immediatamente riflessa nel metodo chiamante. Il metodo può modificare interamente il valore della variabile e puntarlo su un oggetto completamente distinto. Come puoi vedere nella funzione 'set_list', abbiamo cambiato il contenuto della lista e stampato una lista completamente nuova con l'elemento 'Aqsa'. Questo perché abbiamo restituito la lista modificata e l'abbiamo stampata sulla stessa riga del chiamante.

Il metodo può anche riallocare gli elementi della variabile per lo stesso risultato come di seguito. Puoi vedere che abbiamo aggiunto un nuovo valore all'elenco e la modifica si è riflessa. Abbiamo aggiunto una stringa univoca a un elenco e l'abbiamo restituita al chiamante. Per concludere, il metodo e il chiamante hanno utilizzato la stessa variabile e lo stesso oggetto durante la relazione di passaggio.

Passa per valore

Attraverso il passaggio per valore, al metodo viene fornito un duplicato dell'oggetto argomento che il chiamante gli assegna. Ciò garantisce che l'elemento originale rimanga invariato e tutte le modifiche apportate vengano conservate in posizioni di memoria separate in una replica dello stesso oggetto.

È ugualmente valido con qualsiasi operazione eseguita su una variabile o sull'entità dal metodo. I duplicati di variabili e oggetti nell'ambito del metodo chiamante sono completamente separati per riassumerli.

Passa oggetto per riferimento

In tutta questa situazione, poiché Python è distinto, i metodi di Python ottengono il riferimento all'oggetto molto simile nella memoria a cui si riferisce il chiamante. Al contrario, la tecnica non ottiene la variabile 'mylist' (il contenitore). Il metodo chiamante archivia lo stesso oggetto; il metodo genera il proprio contenitore e genera un indice completamente nuovo per se stesso, proprio come nel pass-by-value.

Il chiamante e il metodo parlano dello stesso oggetto nell'archivio, ma quando il metodo aggiunto applica un elemento esterno a un elenco, l'entità chiamante viene modificata. Hanno più etichette, ma sono le stesse cose. Entrambe le variabili contengono un oggetto molto simile. Questo è il senso dietro la sua relazione con il movimento dell'oggetto. Nella memoria, il metodo e il chiamante usano un oggetto simile ma li catturano attraverso più variabili. La variabile chiamante (il contenitore) non verrà modificata da eventuali modifiche apportate alla variabile del metodo (il contenitore); vengono modificati solo i dati o il contenuto.

Conclusione

Python opera indipendentemente dai linguaggi che accettano lo spostamento per Riferimento o valore degli argomenti. Gli argomenti del metodo sono variabili locali che sono state allocate a ciascun valore trasferito al metodo. Ma ciò non ti impedisce ancora di ottenere gli stessi risultati che avresti trovato in altre lingue spostando gli argomenti per procura.