Maison  >  Article  >  développement back-end  >  Analyse sur la différence entre les opérateurs "==" et "is" en Python

Analyse sur la différence entre les opérateurs "==" et "is" en Python

高洛峰
高洛峰original
2017-03-16 16:21:531031parcourir

Préface

Avant de parler de la différence entre les deux opérateursest et ==, il faut d'abord savoir ce qu'est l'objet en Python contient Les trois éléments de base sont : id (identité), python type() (type de données) et value (valeur). is et == sont tous deux utilisés pour comparer et juger des objets, mais le contenu de la comparaison d'objets est différent. Jetons un coup d'œil aux différences spécifiques.

Il existe deux méthodes en Python pour comparer si deux objets sont égaux. En termes simples, leurs différences sont les suivantes :

est compare deux référencesQue ce soit. pointe vers le même objet (comparaison de référence).

== consiste à comparer si deux objets sont égaux.

>>> a = [1, 2, 3]
>>> b = a
>>> b is a # a的引用复制给b,他们在内存中其实是指向了用一个对象
True 
>>> b == a # 当然,他们的值也是相等的
True
>>> b = a[:] # b通过a切片获得a的部分,这里的切片操作重新分配了对象,
>>> b is a # 所以指向的不是同一个对象了
False
>>> b == a # 但他们的值还是相等的
True
Le principe de mise en œuvre

est de comparer si les deux sont le même objet, donc ce qui est comparé est l'adresse mémoire (si l'identifiant est le même).

== est une comparaison de valeurs. Les objets immuables, tels que int, str, compareront directement les valeurs. Pour les objets connus de Python, leur fonction eq

sera appelée pour comparaison. (En fait, les objets connus doivent également être comparés via la fonction d'équation intégrée). Pour les objets personnalisés, si la fonction eq est implémentée, elle sera utilisée à des fins de comparaison. Si elle n'est pas implémentée, l'effet est le même que ==.

对象缓存机制
Python mettra en cache des objets relativement petits. La prochaine fois qu'un objet relativement petit sera utilisé, il recherchera dans la zone de cache, s'il est trouvé, il n'ouvrira pas de nouvelle mémoire, mais continuera. pour mettre en cache le petit objet. L'adresse de l'objet reçoit la nouvelle valeur. Exemple :

>>> c = 1
>>> d = 1
>>> print(c is d) 
True
 
>>> 1000 is 10**3
False
>>> 1000 == 10**3
True
L'affectation est calculée et n'utilise pas la zone tampon. Cela peut être vu dans le premier exemple de code.

Pour

string, vous pouvez forcer l'utilisation du buffer en utilisant la fonction interne.

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