Maison  >  Article  >  développement back-end  >  La différence entre les signes is et == en python

La différence entre les signes is et == en python

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼original
2019-06-24 11:48:042785parcourir

Tout en Python est un objet. Les trois éléments de base contenus dans les objets en Python sont : id (identité), type (type de données) et valeur (valeur). Vous pouvez utiliser == ou pour comparer les objets pour vérifier leur égalité. is et == sont tous deux utilisés pour comparer et juger des objets, mais le contenu de la comparaison et du jugement des objets est différent. Jetons un coup d'œil aux différences spécifiques ?

La différence entre les signes is et == en python

est-ce que l'on compare si les valeurs d'identification des deux objets sont égales, c'est-à-dire si les deux objets sont la même instance object Que ce soit pointant vers la même adresse mémoire.

== compare si le contenu de deux objets est égal. Par défaut, la méthode __eq__ de l'objet sera appelée.

== est un opérateur de comparaison parmi les opérateurs standard Python, utilisé pour comparer et déterminer si les valeurs de deux objets sont égales.

Recommandations associées : "Tutoriel vidéo Python"

Regardons d'abord un exemple

>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True

est également appelé l'opérateur d'identité, qui est id Sont-ils les mêmes.

Regardez le code ci-dessous. Les identifiants des variables a et b sont différents, donc b == a est vrai, b est a est faux.

Regardez à nouveau leurs identifiants :

>>> id(a)
4364243328
>>>
>>> id(b)
4364202696

Dans quels cas et == ont-ils exactement le même résultat ?

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a == b
True
>>> a = 1000
>>> b = 10**3
>>> a == b
True
>>> a is b
False
>>>

Les types de numéros ne sont donc pas exactement les mêmes.

Alors pourquoi est-ce pareil à 256 mais différent à 1000 ?

En raison de considérations de performances, Python a effectué beaucoup de travail d'optimisation interne. Pour les objets entiers, Python met en cache certains objets entiers fréquemment utilisés et les enregistre dans une liste chaînée appelée small_ints. En Python pendant tout le cycle de vie, tout endroit qui doit référencer ces objets entiers ne créera plus de nouveaux objets, mais référencera directement les objets dans le cache.

Python place ces petits objets qui peuvent être fréquemment utilisés dans la plage [-5, 256] dans small_ints. Chaque fois que vous avez besoin d'utiliser des petits entiers, prenez-les simplement d'ici et non plus Pour créer temporairement de nouveaux objets. .

>>> c = 'miracle.young'
>>> d = 'miracle.young'
>>> c is d
False
>>> c == d
True
>>> c = 'miracleyoung'
>>> d = 'miracleyoung'
>>> c is c
True
>>> c == d
True

Les types de chaînes ne sont donc pas exactement les mêmes, cela est lié à l'implémentation de l'interpréteur.

>>> a = (1,2,3) # a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> a = [1,2,3] # a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> a = {'miracle':100,'young':1} # a和b为dict类型
>>> b = {'miracle':100,'young':1}
>>> a is b
False
>>> a = set([1,2,3]) # a和b为set类型
>>> b = set([1,2,3])
>>> a is b
False

Ainsi, lorsque la variable est un nombre, une chaîne, un tuple, une liste ou un dictionnaire, is et == sont différents et ne peuvent pas être utilisés de manière interchangeable ! Lorsque vous comparez des valeurs, vous devez utiliser ==, et lorsque vous comparez s'il s'agit de la même adresse mémoire, vous devez utiliser is.

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