Parfois python laisse dubitatif :
In [1]: alist = [{"pouet": 0, "prout":1},]*12
In [2]: alist
Out[2]:
[{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1}]
In [3]: alist[4]["pouet"] = 12
In [4]: alist
Out[4]:
[{'pouet': 12, 'prout': 1},
{'pouet': 12, 'prout': 1},
{'pouet': 12, 'prout': 1},
{'pouet': 12, 'prout': 1},
{'pouet': 12, 'prout': 1},
{'pouet': 12, 'prout': 1},
{'pouet': 12, 'prout': 1},
{'pouet': 12, 'prout': 1},
{'pouet': 12, 'prout': 1},
{'pouet': 12, 'prout': 1},
{'pouet': 12, 'prout': 1},
{'pouet': 12, 'prout': 1}]
Langage du code : JavaScript (javascript)
Donc quand on crée une liste par multiplication, ([1]*12) l’objet n’est pas dupliqué, juste le pointeur vers l’objet.
Cette méthode résout le problème:
In [5]: alist = [{"pouet": 0, "prout":1} for _ in range(12)]
In [6]: alist
Out[6]:
[{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1}]
In [7]: alist[4]["pouet"] = 12
In [8]: alist
Out[8]:
[{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 12, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1},
{'pouet': 0, 'prout': 1}]
Langage du code : JavaScript (javascript)
Voila c’est tout, mais ça m’a bouffé une heure.
Parfois python laisse dubitatif : In [1]: alist = [{"pouet": 0, "prout":1},]*12 In [2]: alist Out[2]: [{'pouet': 0, 'prout': 1}, {'pouet': 0, 'prout': 1}, {'pouet': 0, 'prout': 1}, {'pouet': 0,...