Partage
  • Partager sur Facebook
  • Partager sur Twitter

les identifiants des tuples

    2 novembre 2022 à 20:42:35

    Bonjour,

    Les tuples sont des objets non mutables. Donc, après la définition d'une variable de type tuple, son identifiant ne change pas que si on affecte une nouvelle valeur à cette variable.

    j'ai exécuté successivement les instructions suivantes

    >>> id((1,2,3))

    50462352

    >>> t=(1,2,3)

    >>> id(t)

    50456416

    >>> t2=(1,2,3)

    >>> id(t2)

    50462352

    Je n'ai pas compris pourquoi id(t) est différent de id((1,2,3)) et id(t2)!=id(t). En principe, les deux tuples pointent sur  le même objet (1,2,3) et donc les 3 identifiants doivent être identiques.

    Je n'ai pas compris ces résultats.

    Pourriez-vous m'exepliquer?

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      2 novembre 2022 à 21:41:22

      Bha mêmes valeurs mais pas mêmes objets.
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        3 novembre 2022 à 0:29:08

        SalmaSalma50 a écrit:

        Je n'ai pas compris pourquoi id(t) est différent de id((1,2,3)) et id(t2)!=id(t). En principe, les deux tuples pointent sur  le même objet (1,2,3) et donc les 3 identifiants doivent être identiques.


        Comme te l'a dit jos, parce que tu as créé deux objets différents, même s'ils ont la même valeur. La non-mutabilité signifie juste tu ne peux modifier les références des trois objets vers lesquels chaque tuple pointe, et que tu ne peux rajouter ou supprimer de référence. Mais un tuple n'est que superficiellement immuable. 

        Pour les chaînes, le phénomène est différent, il se peut que la création de deux chaînes de même valeur  conduise à la création d'une seule chaîne:

        >>> t="123"                                                                                                                                                                       
        >>> id(t)                                                                                                                                                                          
        140262577344216                                                                                                                                                                    
        >>> u='123'
        >>> id(u)                                                                                                                                                                          
        140262577344216                                                                                                                                                                    
        >>> 

        Le phénomène se produit aussi pour des petits entiers, par exemple justement, dans tes deux tuples différents, les entiers sont les mêmes :

        >>> t=(1,2,3)
        >>> u=(1,2,3)
        >>> id(t)==id(u)
        False
        >>> id(t[0])==id(u[0])
        True
        >>>

        Ça doit dépendre de l'implémentation de l'interpréteur, c'est fait pour des raisons d'optimisation. Cherche "caching" ou "interning".



        • Partager sur Facebook
        • Partager sur Twitter
          7 novembre 2022 à 13:59:24

          t = (1, 2, 3)
          t2 = (1, 2, 3)

          t1 et t2 son différent cas python les attribue une adresse en memoir différente. Pour la petite précision les deux tuples ne pointe pas sur le même objet.

          -
          Edité par Franck_popo 7 novembre 2022 à 14:02:42

          • Partager sur Facebook
          • Partager sur Twitter
            8 novembre 2022 à 19:24:27

            Le but est d'économiser de la place mémoire.

            Tant que les valeurs du tuple sont identiques, on peut rechercher au même endroit l'un ou l'autre des tuples, ce qui donne un gain de temps et d'espace.

            • Partager sur Facebook
            • Partager sur Twitter

            Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
            La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

            les identifiants des tuples

            × 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