Passare per riferimento vs. Valore in Python

Passare per riferimento vs. Valore in Python
Dopo aver conosciuto Python, puoi trovare istanze in cui le funzioni non alterano gli argomenti in un posto come prevederesti, in particolare se conosci molte altre lingue di computer. Molte lingue usano gli argomenti del metodo come riferimenti, definiti come passando per riferimento alle variabili attuali. Se sei uno sviluppatore Python avanzato che vuole cogliere il modo particolare di Python di trattare gli argomenti del metodo, allora questa guida è davvero per te.

Python Supports Pass by Object Reference

Pass-by-Reference e pass per valore sono innegabilmente i due modi più ben riconosciuti e facilmente comprensibili per il passaggio dei parametri tra i linguaggi di programmazione. Python è, purtroppo, "pass-by-object-reference," né "pass per valore" né "pass per riferimento", spesso definito come "chiamata per riferimento oggetto" e "chiamata per condivisione."È utile guardare più da vicino il concetto stesso dividendolo in segmenti mentre ti immergi nelle specifiche tecniche del passaggio per riferimento:

Passaggio: Ciò significa fornire un metodo con un argomento.

Come riferimento: Ciò significa che l'argomento che si sposta sul metodo si riferisce a una variabile che ora risiede in archiviazione anziché in una replica diversa di quella variabile.

Quando si assegna il metodo un riferimento a una variabile definita, la variabile a cui corrisponde sarebbe esplicitamente influenzata da tutte le operazioni su questo riferimento. Ora consideriamo un esempio di come, in pratica, funziona. In questo esempio, abbiamo definito una variabile "Arg ' avere un valore di 4. Durante questo scenario, la variabile 'Arg ' non era modificato al suo posto. Python sembra gestire l'argomento fornito invece di un riferimento a una variabile attuale 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 mutabili e alcuni non sono mutabili.

Se spostiamo un oggetto mutabile in una funzione, la funzione acquisisce un riferimento allo stesso oggetto in modo da poter mutere 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 si sposta un oggetto immutabile in una funzione, il riferimento esterno non può sempre essere re-legato e non puoi semplicemente mutare l'oggetto. Per rendere le cose molto più semplici, capiamo uno per uno.

Passare per riferimento

Prima di tutto, devi capire che la variabile "mylist" stessa non è un elenco ma si riferisce a un elenco 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 dritta nella funzione con il suo contenuto.

Sia "elenco" che "My List" sembrano essere la stessa variabile di archiviazione nell'esempio del codice di seguito e quindi si applicano allo stesso oggetto di archiviazione. Ecco perché in output, stampa 'Saeed.'

Qualsiasi azione eseguita sulla variabile o sull'entità verrebbe immediatamente rispecchiata sul metodo del chiamante. Il metodo può modificare completamente il valore della variabile e puntarlo su un oggetto completamente distinto. Come puoi vedere nella funzione "set_list", abbiamo modificato il contenuto dell'elenco e stampato un elenco completamente nuovo con l'elemento "AQSA.'Questo perché abbiamo restituito l'elenco modificato e stampato sulla stessa riga del chiamante.

Il metodo può anche riallocare gli elementi della variabile per lo stesso risultato di seguito. Puoi vedere che abbiamo aggiunto un nuovo valore all'elenco e la modifica è stata 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 oggetto in tutta la relazione pass-by.

Passare per valore

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

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

Passare l'oggetto per riferimento

Durante questa situazione, poiché Python è distinto, i metodi di Python ottengono il riferimento di oggetti molto simile nello spazio di archiviazione in quanto il chiamante si riferisce. Al contrario, la tecnica non ottiene la variabile "mylist" (il contenitore). Il metodo chiamante memorizza lo stesso oggetto; Il metodo genera il proprio contenitore e genera un indice completamente fresco per il suo, proprio come nel valore pass per valore.

Il chiamante e il metodo parlano dello stesso oggetto nell'archiviazione, ma quando il metodo aggiunto applica un elemento esterno a un elenco, l'entità del 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 per l'oggetto. Nell'archiviazione, il metodo e il chiamante utilizzano un oggetto simile, ma li catturano attraverso più variabili. La variabile chiamante (il contenitore) non verrà modificata da alcuna modifica apportata alla variabile del metodo (il contenitore); Solo i dati o il contenuto vengono modificati.

Conclusione

Python opera indipendentemente dalle lingue che accettano il movimento per riferimento o valore degli argomenti. Gli argomenti del metodo sono variabili locali che sono state assegnate a ciascun valore trasferito al metodo. Ma questo non ti impedisce ancora di ottenere gli stessi risultati che troveresti in altre lingue mentre si sposta gli argomenti per proxy.