Ciao,
cerco di darti una risposta che riassuma quanto già detto e che spieghi cosa avviene all’interno della memoria del calcolatore.
Una matrice è una lista di liste.
Quando tu copi la matrice, lo fai inmagino con la funzione built-in “copy()” oppure con lo slicing “[:]”.
Entrambi questi metodi hanno però un problema.
In generale, quando crei la copia di una lista, quello che succede è che si crea una nuova lista in una posizione di memoria diversa dalla prima, e vengono poi copiati i contenuti all’interno della seconda.
Quando però hai una lista di liste, la lista più grande (cioè quella che contiene le altre liste) viene effettivamente copiata in un’altra posizione di memoria, ma quando poi si va a copiare il contenuto, che in questo caso sono liste, rimangono con la loro posizione di memoria iniziale. Questo significa che quando modificherai le liste all’interno della lista copiata, starai modificando anche le liste di partenza (cioè il contenuto della matrice iniziale.
Per ovviare a questo problema, il metodo più veloce sarebbe utilizzare la funzione deepcopy() che però sfortunatamente non è built-in e andrebbe importata. Poiché noi non possiamo importare nulla, ti scrivo cosa fa questa funzione.
In realtà è molto semplice
basta creare un ciclo for che copi ogni elemento della matrice iniziale.
L = [] #inizializzi una lista
for lista in matrice_iniziale:
#aggiungi ciascun elemento all’interno della lista inizializzata sopra
dopo questo ciclo L sarà una deep- copia , ossia una copia che non ti darà più alcun problema.
Anche a me si era presentato questo errore e mi ha portato via mezz’ora :) Spero possa averti aiutato.