Bonjour,
Je viens de me tirer les cheveux 1 bonne heure sur un code qui avait un comportement bizarre ... les éléments d'un tableaux semblaient faire tous référence au même objet, ce qui n'était pas le cas. En réalité, c'était l'un des composant d'un de ces objets qui référait au même .... j'ai alors cherché un peu, et ca vient de mon constructeur de mon objet.
Apparement, l'argument par défaut est créé une fois pour toute et tous les appels renvoient tous aux même.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class MyClass : def __init__(self,d={}) : self.d = d a=MyClass() b=MyClass() print a.d,b.d >>> {},{} #jusque là tout va bien #mais : a.d["test"] = 1 print a.d,b.d >>> {"test":1},{"test":1} # (!)
Cette optimisation est compréhensible dans une méthode bébête, mais dans un constructeur, je trouve ce comportement très surprenant.
Alors bug ou spécification du langage (j'avoue que j'ai pas eu le courage d'aller fouiller dans la spéc)?
Partager