Oui, je sais bien, c'est pour ça que j'ai dit que c'est documenté, et Benoît en a donné les limites exactes. Mais présenté sous la forme où je l'ai mise, ça montre vraiment l'absurdité de ce comportement, et le peu de fiabilité que donne l'opérateur "is" avec les entiers. Parce qu'on ne connaît pas dans le déroulement d'une routine la valeur qu'aura "c", dans cet exemple.
Tu es sûr que ça vient de cpython ? Je crois plutôt que ça vient de la conception de python, qui dit que chaque entier est une classe, donc a=1 et b=1 fait qu'ils pointent vers la même classe, donc a is b est vrai. Mais passé une certaine limite, ça n'est plus vrai, ça ne sont plus des classes, je ne me rappelle plus pour quelle raison, mais ça a probablement à voir avec le fait qu'on ne peut avoir une infinité de classes pré-définies.
Il suffisait de ne pas définir les entiers comme classes, après tout les floats n'en sont pas, et a = 1.0 ; b = 1.0 ; a is b renvoie False.
[^] # Re: Je joue le jeu
Posté par sebas . En réponse au journal le défi du challenge : qu'affiche ce code. Évalué à 4.
Oui, je sais bien, c'est pour ça que j'ai dit que c'est documenté, et Benoît en a donné les limites exactes. Mais présenté sous la forme où je l'ai mise, ça montre vraiment l'absurdité de ce comportement, et le peu de fiabilité que donne l'opérateur "is" avec les entiers. Parce qu'on ne connaît pas dans le déroulement d'une routine la valeur qu'aura "c", dans cet exemple.
Tu es sûr que ça vient de cpython ? Je crois plutôt que ça vient de la conception de python, qui dit que chaque entier est une classe, donc a=1 et b=1 fait qu'ils pointent vers la même classe, donc
a is best vrai. Mais passé une certaine limite, ça n'est plus vrai, ça ne sont plus des classes, je ne me rappelle plus pour quelle raison, mais ça a probablement à voir avec le fait qu'on ne peut avoir une infinité de classes pré-définies.Il suffisait de ne pas définir les entiers comme classes, après tout les floats n'en sont pas, et
a = 1.0 ; b = 1.0 ; a is brenvoie False.