cdimauro
15-08-2008, 06:30
In un thread è stato riportato questo (http://mail.python.org/pipermail/python-list/2003-November/234135.html) in merito al passaggio dei parametri con Python, lasciando intendere che ci sia un'alone di confusione, e di poca chiarezza anche nelle risposte fornite.
Facciamo chiarezza. Intanto notiamo la prima risposta (http://mail.python.org/pipermail/python-list/2003-November/234139.html) è già di per se molto chiara.
Il buon Alex Martelli (guru di Google) spiega che il passaggio dei parametri avviene sempre e soltanto per riferimento dell'oggetto (passato). Già questo dovrebbe essere sufficiente per capire il modello adottato da Python.
Successivamente aggiunge dei dettagli per fugare ogni dubbio.
Come per qualunque linguaggio di programmazione orientato agli oggetti, possiamo avere degli oggetti che possono cambiare il loro stato oppure no.
Questo è banale: un oggetto modifica il proprio stato in risposta a particolari metodi che mette e a disposizione. Se non esiste nessun metodo che consente di cambiare il suo stato, è chiaro che... sarà un oggetto non modificabile.
Da qui è evidente che esistono due "tipi" di oggetti in Python (e non): quelli mutabili e quelli immutabili.
Passando i primi come parametri, è ovvio che diamo la possibilità a chi li riceve di poter cambiare il loro stato: è sufficiente che la funzione invochi qualche metodo che lo faccia (oppure che venga fatto accesso in scrittura a qualche proprietà).
Quindi se NON vogliamo che ciò accada, basterà passare sempre... una loro COPIA. Sic et simpliciter.
Coi secondi non esiste la possibilità di cambiamento, per cui non si pone il problema: si possono passare in tutta tranquillità e sicurezza.
E' tutto. Penso sia abbastanza chiaro. Se qualcuno avesse ancora dei dubbi sono a disposizione per chiarirli. :)
Facciamo chiarezza. Intanto notiamo la prima risposta (http://mail.python.org/pipermail/python-list/2003-November/234139.html) è già di per se molto chiara.
Il buon Alex Martelli (guru di Google) spiega che il passaggio dei parametri avviene sempre e soltanto per riferimento dell'oggetto (passato). Già questo dovrebbe essere sufficiente per capire il modello adottato da Python.
Successivamente aggiunge dei dettagli per fugare ogni dubbio.
Come per qualunque linguaggio di programmazione orientato agli oggetti, possiamo avere degli oggetti che possono cambiare il loro stato oppure no.
Questo è banale: un oggetto modifica il proprio stato in risposta a particolari metodi che mette e a disposizione. Se non esiste nessun metodo che consente di cambiare il suo stato, è chiaro che... sarà un oggetto non modificabile.
Da qui è evidente che esistono due "tipi" di oggetti in Python (e non): quelli mutabili e quelli immutabili.
Passando i primi come parametri, è ovvio che diamo la possibilità a chi li riceve di poter cambiare il loro stato: è sufficiente che la funzione invochi qualche metodo che lo faccia (oppure che venga fatto accesso in scrittura a qualche proprietà).
Quindi se NON vogliamo che ciò accada, basterà passare sempre... una loro COPIA. Sic et simpliciter.
Coi secondi non esiste la possibilità di cambiamento, per cui non si pone il problema: si possono passare in tutta tranquillità e sicurezza.
E' tutto. Penso sia abbastanza chiaro. Se qualcuno avesse ancora dei dubbi sono a disposizione per chiarirli. :)