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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

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?

348 views
closed with the note: Ricevuta la risposta cercata

1 Answer

Best answer
E
Edward (25950 points)
4 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)
4 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).