Re: De la mauvaise utilisation de 'is' et '==' ...
Salvatore wrote:
> Bonjour la communauté,
>
> Voici un petit bout de code qui m'intrigue,
>
>
> >>> v = 'TEST'
> >>> if not v is 'TEST':
> ... print "v est different de 'TEST'"
> ... else:
> ... print "v est egal a 'TEST'"
> ...
> v est egal a 'TEST'
> >>>
> >>>
>
>
> >>> v = 'N/A'
> >>> if not v is 'N/A':
> ... print "v est different de 'N/A'"
> ... else:
> ... print "v est egal a 'N/A'"
> ...
> v est different de 'N/A'
> >>>
> >>> v != 'N/A'
> False
>
>
> J'avoue que je ne comprend pas très bien le fonctionnement de
> l'opérateur 'is' dans ces tests.
> Manifestement le caractère '/' modifie son comportement
> Curieusement, je n'avais encore jamais été confronté à cette situation.
> Si quelqu'un a une explication, je suis preneur
>
> Cordialement
>
> Salvatore
is, c'est l'operateur d'égalité d'objet en mémoire. Il est tout à fait
envisageable d'avoir en deux string différentes en mémoire ayant le même
contenu. A ce moment, les strings comparent à faux avec is mais à vrai avec
== car ce dernier test le contenu des objets
a is b <=> id(a) == id(b)
Après, la ligne de commande python ou le compilateur .py=>.pyc peut faire
certaines optimisations qui fait que ce genre de code renvoit vrai sur le
premier print :
>>> a = "test"
>>> b = "test"
>>> print a is b
>>> a += "e"
>>> b += "e"
>>> print a is b
Mais en général, vous obtenez toujours faux sur le deuxième même si
manifestement a == b.
|