Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Strano comportamento di una lista passata tra funzioni

palombaro_rosa (1430 points)
1 2 7
in HW1 opzionale by (1.4k points)
closed by

Mi servirebbe veramente una mano con un problema strano che sto avendo nell 'HW8 (piú precisamente col file 'esempio_HHGTTG.txt' ): per qualche motivo, solo in questo test, la lista delle mie parole da cercare nella griglia sembra cambiare valore se una funzione a cui viene passata (ma che non la ritorna mai) la modifica.

Faccio un esempio: se ho una variable LISTAPAROLE con 20 elementi, e successivamente eseguo  ESEMPIO = cercaparole(LISTAPAROLE), all'interno della quale la referenza locale di LISTAPAROLE perde 4 elementi, LISTAPAROLE avrá perso 4 elementi anche all'interno della variabile originale nella funzione principale, pur non avendo avuto un return di nessun tipo per quella variabile: come posso fare per evitarlo?

331 views
closed with the note: Ricevuta la risposta cercata

1 Answer

Best answer
E
Edward (25950 points)
3 4 172
by (26.0k points)
selected by
Questo comportamento non è strano, bensì il normale comportamento delle liste.

Le liste sono oggetti mutabili, quando le passi come parametro ad una funzione, stai in realtà passando il puntatore all'oggetto. Le modifiche che farai alla lista all'interno della funzione saranno presenti anche all'esterno della funzione.
Per evitare di modificare la lista dentro la funzione, puoi crearne una copia ed operare su di essa con nomelista.copy().
palombaro_rosa (1430 points)
1 2 7
by (1.4k points)
Perfetto grazie, avevo dato erroneamente per scontato che passandole ad un'altra funzione questa diventasse automaticamente una sua copia in scope locale.
E
Edward (25950 points)
3 4 172
by (26.0k points)
Di nulla. Ricorda che questo comportamento avviene con ogni oggetto mutabile, quindi con liste, dizionari, e insiemi.

Se hai una lista che non intendi modificare, puoi usare una tupla che è un oggetto immutabile (in questo modo se la passassi ad una funzione, ne creeresti una copia).