Autant j'aime Python, les trucs de référence et deepcopy me font parfois peur.Deepcopy sur les listes référencées imbriquées créées par la multiplication de liste ne fonctionne pas
Pourquoi ne deepcopy fonctionne pas ici:
>>> import copy
>>> a = 2*[2*[0]]
>>> a
[[0, 0], [0, 0]]
>>> b = copy.deepcopy(a)
>>> b[0][0] = 1
>>> b
[[1, 0], [1, 0]] #should be: [[1, 0], [0, 1]]
>>>
J'utilise un tableau numpy comme workarround dont j'ai besoin plus tard de toute façon. Mais j'avais vraiment espéré que si j'utilisais deepcopy, je n'aurais plus à chercher de références non-désirées. Y a-t-il d'autres pièges où ça ne marche pas?
+1 pour bien faire les choses. –
Merci pour les réponses rapides. J'apprécie votre solution élégante. Pourtant, il me semble que le manuel deepcopy est trompeur ("Une copie profonde construit un nouvel objet composé puis, récursivement, insère * des copies * dans les objets trouvés dans l'original."). Ce serait bien d'avoir une fonction qui ferait ce que je m'attendrais à ce que deepcopy fasse: se débarrasser de toutes les références doubles. – Gonzo