Afficher un message
Vieux 05/10/2007, 20h26   #10
Christophe Cavalaria
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut 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.

  Réponse avec citation
 
Page generated in 0,05119 seconds with 9 queries