Partage
  • Partager sur Facebook
  • Partager sur Twitter

dictionnaire a = dictionnaire b

Sujet résolu
    2 décembre 2015 à 20:36:29

    Bonjour à tous,

    J'ai un petit souci que je n'arrive pas à comprendre.

    J'ai un premier dictionnaire et je veux "copier" ce dictionnaire pour le modifier par la suite. Mais voilà, après ma modification sur mon second dictionnaire, mon dictionnaire d'origine est également modifié. Il y a probablement quelque chose qui m'échappe ou que je ne fait pas bien, si vous pouviez m'éclairer...

    ex :

    >>> dictionnaire_a = {(0,0) : 'A', (1,1) : 'B', (2,2) : 'C'}
    >>> dictionnaire_b = dictionnaire_a
    >>> dictionnaire_b[(0,0)] = 'F'
    >>> print(dictionnaire_a)
    {(0, 0): 'F', (1, 1): 'B', (2, 2): 'C'}
    >>> print(dictionnaire_b)
    {(0, 0): 'F', (1, 1): 'B', (2, 2): 'C'}


    Merci d'avance pour votre aide !

    • Partager sur Facebook
    • Partager sur Twitter
      2 décembre 2015 à 20:42:58

      Bon, évidemment il a fallut que je poste mon problème pour trouver la solution même pas 5 min derrière. J'imagine qu'écrire son problème permet parfois de le rendre plus clair :D.

      D'après ce que j'ai compris, la copie doit être explicite, sinon les 2 variables renvoient au même objet derrière. 

      Du coup il suffit de faire

      dictionnaire_b = dict(dictionnaire_a)

      C'était pas bien compliqué...

      Désolé pour le post inutile du coup :-°

      -
      Edité par AlexandreLaTruite 2 décembre 2015 à 20:43:37

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        2 décembre 2015 à 20:44:56

        salut ;)

        C'est tout à fait normal, tu fais une copie simple, pas une copie profonde

        Ici c'est comme si dico_a était un objet, et dico_b une référence à un seul et même objet.

        Pour faire une copie profonde qui n'agira pas sur le second dico, tu as plusieurs choix :

        tout copier d'un dico à l'autre dans une boucle for (avec dico_a.items() pour obtenir le couple clé - valeur), ou bien utiliser deepcopy (fonction) de copy (module) :)

        J'en dis pas plus, je te laisse chercher (c'est tellement plus constructif d'avoir des pistes et de chercher tout seul, on apprend mieux ^^)

        -
        Edité par Anonyme 4 décembre 2015 à 18:30:11

        • Partager sur Facebook
        • Partager sur Twitter
          4 décembre 2015 à 6:16:11

          Ça le mérite aussi pour les autres d'apprendre ...j'en fais parti, merci pour l'info ( je m'étais pas encore pose la question)
          • Partager sur Facebook
          • Partager sur Twitter
          http://sinclair.recreatedzxspectrum.com/index.php
            4 décembre 2015 à 9:55:52

            Yaalval a écrit:

            Ici c'est comme si dico_a était un objet, et dico_b une référence à cet objet.

            Non, c'est comme si dico_a et dico_b étaient deux étiquettes/références vers un même objet. Il n'y en a pas un qui est un "vrai" objet et l'autre une référence vers le premier.

            • Partager sur Facebook
            • Partager sur Twitter
              4 décembre 2015 à 15:15:46

              Yaalval a écrit:

              ou bien utiliser deepcopy (fonction) de copy (module) :)

              Dans son cas précis, même pas besoin de faire une deepcopy du dictionnaire, étant qu'il s'agit de strings.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                4 décembre 2015 à 18:29:33

                entwanne a écrit:

                Yaalval a écrit:

                Ici c'est comme si dico_a était un objet, et dico_b une référence à cet objet.

                Non, c'est comme si dico_a et dico_b étaient deux étiquettes/références vers un même objet. Il n'y en a pas un qui est un "vrai" objet et l'autre une référence vers le premier.


                Effectivement oui, j'ai pas fais gaffe (je confond avec le C je pense)

                Jevanni a écrit:

                Yaalval a écrit:

                ou bien utiliser deepcopy (fonction) de copy (module) :)

                Dans son cas précis, même pas besoin de faire une deepcopy du dictionnaire, étant qu'il s'agit de strings.

                C'est juste pour donner une solution "générale"

                Je corrige

                • Partager sur Facebook
                • Partager sur Twitter

                dictionnaire a = dictionnaire b

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown