Analyse détaillée de is et == en Python (avec code)

不言
Libérer: 2019-03-21 16:03:37
avant
2492 Les gens l'ont consulté

Cet article vous apporte une analyse détaillée de is et == en Python (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

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)
  • value(value)

Pour comparer si les objets sont égaux, vous pouvez utiliser == ou is.

is et == sont tous deux utilisés pour comparer et juger des objets, mais le contenu de la comparaison et du jugement d'objets est différent. Jetons un coup d'œil à la différence spécifique ?

est de comparer si les valeurs d'identification des deux objets sont égales, c'est-à-dire si les deux objets sont le même objet d'instance et pointent 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.

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
Copier après la connexion

est également appelé l'opérateur d'identité, c'est-à-dire si les identifiants sont 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
Copier après la connexion

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
>>>
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

Ainsi, lorsque la variable est un nombre, une chaîne, un tuple, une liste ou un dictionnaire, is et == ne sont pas identiques 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.
Bien sûr, il existe de nombreux cas de comparaison en matière de développement.

Cet article est terminé ici. Pour un contenu plus passionnant, vous pouvez faire attention à la colonne Vidéo du didacticiel python du site Web PHP chinois !

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal