Cherchez l’erreur…
# -*- coding: utf-8 -*-
# Initialisation de deux listes apparemment identiques…
liste1 = [[0,0,0],[0,0,0],[0,0,0],[0,0,0]]
liste2 = 4*[3*[0]]
# Ces deux listes sont effectivement identiques ;
print liste1 == liste2 # Renvoie True
# Mais leur comportement est loin d’être le même…
liste1[1][2] = 1 # Ce qui donne : [[0,0,0],[0,0,1],[0,0,0],[0,0,0]]
liste2[1][2] = 1 # Alors qu’ici : [[0,0,1],[0,0,1],[0,0,1],[0,0,1]]
print liste1 == liste2 # Renvoie False
En fait, dans le deuxième cas, on crée quatre copies de la même liste. La modification de l’une de ces copies entraîne logiquement la modification de toutes les copies. Comment faire alors ? Il existe une solution élégante, la compréhension de liste ;
# -*- coding: utf-8 -*-
liste3 = [3*[0] for _ in range(4)]
liste3[1][2] = 1 # Donne [[0,0,0],[0,0,1],[0,0,0],[0,0,0]]