Gli sviluppatori che si lanciano nella programmazione Python da altri linguaggi come C++ e Java sono spesso confusi dal processo di passaggio degli argomenti in Python. Il modello dati incentrato sugli oggetti e il modo in cui tratta l'assegnazione sono le cause della confusione a livello fondamentale.
Nell’articolo parleremo del concetto di come passare un valore per riferimento in Python E cercare di comprendere gli esempi di passaggio per riferimento in Pitone.
Tabella dei contenuti
- Passa per valore e Passa per riferimento in Python
- La variabile non è l'oggetto
- Che cos'è il passaggio per riferimento in Python?
- Che cos'è Passa per valore in Python?
Passa per valore e Passa per riferimento in Python
Potresti voler dare un pugno a qualcosa dopo aver letto in anticipo, quindi preparati. Il modello di passaggio degli argomenti di Python è né Passa per valore né Passa per riferimento ma è Passa per riferimento oggetto.
A seconda del tipo di oggetto passato alla funzione, la funzione si comporta diversamente. Gli oggetti immutabili mostrano il passaggio per valore mentre gli oggetti mutabili mostrano il passaggio per riferimento.
Puoi verificare la differenza tra pass-by-value e pass-by-reference nell'esempio seguente:
Python3
sostituire dalla stringa in Java
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)> |
>
>
Produzione
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']>
Nel codice precedente, abbiamo mostrato come Python utilizza il concetto di chiamata per oggetto di riferimento nel suo programma.
Passiamo un numero intero nella funzione call_by_value(). Gli interi sono oggetti immutabili, quindi Python funziona in base alla chiamata per valore e le modifiche apportate nella funzione non si riflettono all'esterno della funzione.
Passiamo quindi la lista alla funzione per riferimento. Nella funzione call_by_reference() passiamo una lista che è un oggetto mutabile. Python funziona in base alla chiamata per riferimento in questa funzione e le modifiche apportate all'interno della funzione possono essere viste anche all'esterno della funzione.
La variabile non è l'oggetto
Qui a è una variabile che punta a una lista contenente gli elementi X e Y. Ma a stessa non è una lista. Considera a come un secchio che contiene gli oggetti X e Y.
a = ['X', 'Y']>

Che cos'è il passaggio per riferimento in Python?
Passa per riferimento significa che devi passare la funzione (riferimento) a una variabile, il che significa che la variabile esiste già in memoria.
Qui, la variabile (il bucket) viene passata direttamente alla funzione. La variabile agisce come un pacchetto che viene fornito con il suo contenuto (gli oggetti).

Nell'immagine del codice sopra, sia list che my_list sono la stessa variabile contenitore e quindi fanno riferimento allo stesso oggetto in memoria. Qualsiasi operazione eseguita dalla funzione sulla variabile o sull'oggetto verrà riflessa direttamente dal chiamante della funzione. Ad esempio, la funzione potrebbe modificare completamente il contenuto della variabile e puntarla su un oggetto completamente diverso:

Inoltre, la funzione può riassegnare il contenuto della variabile con lo stesso effetto riportato di seguito:

Per riassumere, nel pass-by-reference, la funzione e il chiamante utilizzano la stessa variabile e lo stesso oggetto.
Passa per riferimento nell'esempio di Python
In questo esempio, la funzione modification_list accetta un elenco per riferimento. La funzione aggiunge la stringa Geeks all'elenco passato all'interno della funzione e la stampa. Poiché gli elenchi sono tipi di dati modificabili, le modifiche apportate all'elenco all'interno della funzione si riflettono anche all'esterno della funzione, come puoi vedere nell'output.
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)> |
>
>
Produzione
Inside function: ['Geeks', 'for', 'Geeks'] Outside function: ['Geeks', 'for', 'Geeks']>
Che cos'è Passa per valore in Python?
In questo approccio, passiamo una copia di IL variabili effettive nella funzione come parametro. Pertanto qualsiasi modifica sui parametri all'interno della funzione non si rifletterà nella variabile effettiva.

Lo stesso vale per qualsiasi operazione eseguita dalla funzione sulla variabile o sull'oggetto

Riassumendo, le copie delle variabili e degli oggetti nel contesto del chiamante della funzione sono completamente isolate.
Passa per valore nell'esempio di Python
Qui passeremo l'intero x alla funzione che è un tipo di dati immutabile. Aggiorniamo quindi il valore dell'intero all'interno della funzione e stampiamo il valore aggiornato. Le modifiche non vengono visualizzate al di fuori della funzione poiché i numeri interi sono tipi di dati immutabili.
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)> |
>
>
Produzione:
tabella dei numeri romani 1 100
Before function call: 5 Inside function: 15 After function call: 5>
La programmazione Python utilizza il concetto di passaggio per oggetto di riferimento mentre passa valori alle funzioni. Questo articolo cerca di mostrarti il concetto di passaggio per valore e passaggio per riferimento in Python. Abbiamo mostrato diversi casi di passaggio di valori con esempi. Passare valori a una funzione in Python è diverso da altri linguaggi di codifica, ma con questo tutorial puoi facilmente comprendere il concetto e implementarlo nel tuo lavoro.
Leggi anche:
Python è chiamato per riferimento o chiamato per valore