Maison >développement back-end >Tutoriel Python >Analyse détaillée de is et == en Python (avec code)
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 :
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
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
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 == 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!