Bonjour,
quand je déclare une liste "unidimensionnelle" (a=[0]*10), tout se passe bien.

Par contre quand je passe à une liste 'bidimensionnelle', je ne comprends plus ce qui se passe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
>>> a=[0]*10
>>> a
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> b=[[0]*10]
>>> b
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
>>> c=[0,10]*10
>>> c
[0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10, 0, 10]
>>> d=[[0,10]]*10
>>> d
[[0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10]]

>>> d[2][0]=222
>>> d
[[222, 10], [222, 10], [222, 10], [222, 10], [222, 10], [222, 10], [222, 10], [222, 10], [222, 10], [222, 10]]
>>> e=[]
>>> for i in range (10):
...     e.append([0, 10])
... 
>>> e
[[0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10]]
>>> e[2][0]=222
>>> e
[[0, 10], [0, 10], [222, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10], [0, 10]]
>>>
Considérons d, si je tape 'd[2][0]=222', tous les d[][0] vont avoir la valeur '222', et non seulement d[2][0]=222.

Par contre, pour 'e', tout se passe correctement.

Comment déclarer une telle structure de façon aussi concise que possible pour avoir le résultat attendu ?
Et quelle est la logique derrière un tel comportement ?

Merci pour votre aide.