Bonjour à tous,
Tout est un peu dans le titre : codant une bête fonction de gestion de matrice (à dimensions multiples), et lançant le programme, j'ai fini par perdre patience à ne pas comprendre une erreur simple. Lorsque je décalais dans une matrice une colonne ou une ligne (ou d'une dimension à l'autre), je modifiais l'objet voulu mais aussi l'objet d'origine (qui devait lui, demeurer intact).
Non sans difficulté (sic !), j'ai fini par remettre la main sur l'erreur, un dictionnaire semblant ne pouvoir ""simplement"" se copier par affectation. En somme Dict2 = Dict1, Dict2 reste une référence de Dict1.
> Question 1: je suis dans le vrai ? Je n'ai pas trouvé spécialement clair la documentation à ce sujet (à ce propos si vous connaissez une bonne traduction...).
Python n'est pas mon langage de programmation "natif" (PHP), et j'avoue que je suis face à un abyme de perplexité face à ce comportement.
> Question 2: Comment dupliquer un dictionnaire (avec tout ce qu'il contient, ordre et affectation interne), sans créer juste une référence supplémentaire à son original? Pour la liste j'ai trouvé [:], mais qui ne fonctionne pas avec les dictionnaires. J'ai essayé Dict2 = dict(Dict1), mais sans résultat probant (création d'une référence). J'ai finalement essayé Dict2 = dict() puis boucler ligne à ligne les affectations de Dict1 dans Dict2 (et devinez quoi? Ben ça crée une référence).
J'ai même essayé Dict2 = dict((list(Dict1)[:])) - sait-on jamais...
Accessoirement, c'est ce genre de petit détail rageant qui vous dit que tous les langages ne sont pas tous aussi «accessibles» qu'on peut bien le lire parfois et, pour être honnête, ça donne l'impression d'un langage pas très abouti, même si je l'aime bien pour des petites routines... :/
> Question 3: Python, bon pour apprendre mais pas pour travailler? (ne me tapez pas)
Bonne fin d'après-midi!
Partager