curiosité (?) python dans l'affectation
Bonjour,
je suis récemment tombé sur un problème dont la résolution m'a laissé perplexe.
Considérons la séquence ci-dessous qui résumé le problème :
Code:
1 2 3 4 5 6 7 8 9 10 11
| a=1
b=[]
b.append(a)
b[-1]=2
print a, b
c=[1,2,3,4]
d=[]
d.append(c)
d[-1][1]=10
print c, d |
L'exécution donne :
1 [2]
[1, 10, 3, 4] [[1, 10, 3, 4]]
La première séquence produit le résultat attendu : "b" est modifié, "a"a garde sa valeur initiale "1". "b[-1]" opère sur la valeur et non sur "a".
Par contre dans la seconde séquence, la modification de "b" modifie aussi "c". Ici on n'opère pas sur la valeur de "d", mais sur celle de "c" qui a servi à initialiser "c".
Ceci est-il cohérent ?
Je suis sous Ubuntu avec python 2.
Cordialement