Maison  >  Article  >  développement back-end  >  Exemple d'analyse de la différence entre is et == en Python

Exemple d'analyse de la différence entre is et == en Python

Y2J
Y2Joriginal
2017-04-21 16:06:451110parcourir

En python, is vérifie si deux objets sont le même objet, et == vérifie s'ils sont égaux, c'est très simple à dire, analysons-le à travers des exemples spécifiques

En Python, pour comparer si. deux objets (variables) sont égaux, vous pouvez utiliser les opérations "is" et "==", mais quelle est la différence entre eux ? Quand utiliser « est » et quand utiliser « ==" ? Au cours de l'entretien, j'ai constaté que de nombreux candidats avaient du mal à expliquer clairement les deux. Par conséquent, dans cet article, « Le Zen de Python » fournira une introduction comparative approfondie et facile à comprendre.

Prenons d'abord un exemple

Xiao Huang a été très riche récemment et a dépensé beaucoup d'argent pour acheter une Tesla P90D. Nommons temporairement cette voiture "Little P". exactement la même que la voiture appartenant à Lao Wang à côté (la voiture s'appelle "Xiao Wang"). Elle a le même modèle, la même apparence et le même prix, et est produite dans le même lot. Ici, nous pouvons dire que « Petit P » et « Petit Wang » sont deux véhicules identiques et égaux (euqal), mais ce sont essentiellement deux objets différents. Un jour, Xiaojun a donné à sa voiture un autre nom en ligne : « Aiju ». Lorsque nous disons « Xiao P », nous parlons en fait de « Aiju », car essentiellement les deux noms font référence à la même voiture, ici nous appelons « Little P ». " et "Aiju" complètement égaux (identiques).

En Python, la différence entre "==" et "is" peut être comparée à cet exemple. Le premier est une comparaison d'égalité, qui compare si les valeurs de deux objets sont égales, et le second. est une comparaison de cohérence. Ce qui est comparé est de savoir si les adresses d'espace mémoire des deux objets sont les mêmes.

Évidemment, si les adresses mémoire sont les mêmes, alors leurs valeurs doivent également être les mêmes. Par conséquent, si "is" renvoie True, alors "==" doit également renvoyer True, mais pas l'inverse. .

parler n'est pas cher, montre-moi le code

Créez d'abord un objet de liste, puis attribuez-lui un nom a, puis définissez une autre variable b pour pointer vers le même objet.

>>> a = [1, 2, 3]
>>> b = a

Les valeurs imprimées​​de a et b sont égales, car ces deux variables pointent vers le même objet, tout comme donner à une voiture deux noms différents.

>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

Bien sûr, les deux is et == renvoient True.

>>> a == b
True
>>> a is b
True

Créez un nouvel objet. Bien que les valeurs soient les mêmes, il s'agit essentiellement de deux objets différents et se trouvent dans deux espaces mémoire différents, donc "is" renvoie False.

>>> c = [1,2,3]
>>> a is c
False

Oui et seulement lorsque les deux variables comparées pointent vers le même objet, "is" renvoie True, et "==" dépend finalement de la méthode eq() de l'objet, essentiellement deux variables. L'opération de comparaison "==" appelle la méthode eq() de l'objet. Par exemple :

>>> class Foo(object):
    def eq(self, other):
      return True

>>> f = Foo()
>>> f == 1
True
>>> f == None
True
>>> f is None
False

Étant donné que la méthode eq de la classe personnalisée Foo renvoie toujours True, "==" avec n'importe quel objet renverra True. It et None sont deux objets différents, donc l'opération « is » renvoie False.

Enfin, réfléchissez à ce code et pourquoi la même opération a des résultats différents

>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = 123
>>> b = 123
>>> a is b
True

Résumé :

Si vous souhaitez comparer, utilisez == pour voir si deux valeurs sont identiques. L'utilisation consiste à comparer s'il s'agit du même objet

En fait, les objets comparés par is en Python sont très similaires aux pointeurs en langage C uniquement. les pointeurs avec la même adresse sont le même pointeur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn