/ / L'inizializzazione dell'array bidimensionale in python-python, array, inizializzazione

L'inizializzazione dell'array bidimensionale in python-python, array, inizializzazione

Ho fatto una domanda sull'inizializzazione di un array bidimensionale ieri, questo è il link: Come implementare questo sorgente C ++ in python?

C'è un problema nella risposta, un amico ha menzionato un modo:

G = [[0]*11]*11

Ma in questo modo, quando cambio il G[0][0] a 2, tutti i G[i][0](0<=i<11) cambierà tutto 2, ma non so perché?

Supplemento:

Questo è quello che pensavo: Il 0 o altro numero è immutable, quindi cambiamo uno di loro, gli altri non saranno modificati. Ma la lista [0, 0, 0, .....] è mutable, quindi quando noi [0, 0, ...] * 11, tutta la lista [0, 0, ...] sarà la stessa, come is la funzione è vera. ho ragione?

risposte:

4 per risposta № 1

Perché hai 11 riferimenti alla stessa lista.

G = [[0] * 11 for x in range(11)]

2 per risposta № 2

Il *11 la notazione fa 11 riferimenti allo stesso oggetto. Se l'oggetto è immutabile non te ne accorgi, perché ogni tentativo di cambiarlo cambia il riferimento a un oggetto diverso.Quando l'oggetto è mutabile puoi modificarlo, come assegnarlo a un membro di una lista, poiché tutti i riferimenti sono lo stesso oggetto, tutti vengono modificati allo stesso tempo.

Mutevole / immutabile potrebbe sembrare di cambiare le cose, ma non lo fa - Python è coerente in entrambi i casi. Prendi in considerazione questo esempio:

G[0] = [3]*11

Vedrai che G [1] non è cambiato.