Que comparez-vous avec Python et ==?

Eh bien, je pense que le fait qu'ils ne soient pas les mêmes est assez répandu, Alors __ je voudrais expliquer à quoi diable comparez-vous __.

Il semble qu'il y ait toujours des erreurs dans l'article, donc je serais heureux si vous pouviez le signaler (je serais heureux s'il y avait des commentaires)

Différence entre == et is

Je vais vous expliquer brièvement (si vous le comprenez, vous pouvez le sauter) Regardez d'abord l'exemple 1

Exemple 1


a = "Maison de lapin"
b = "Maison de lapin" #Même chaîne qu'un
c = "Kantoan" #Chaîne de caractères différente d'un

#a et c==Comparer avec
print(a == c) # False
#Comparez a et c avec is
print(a is c) # False

#a et b==Comparer avec
print(a == b) # True
#Comparez a et b avec is
print(a is b) # False

Puisque "Rabbit House" et "Kantoan" sont naturellement différents, "a == c" et "a est c" sont tous deux "faux".

D'un autre côté, «a» et «b» se ressemblent à première vue ... True quand ʻa == b False quand ʻa est b

Le résultat est différent

Que voulez-vous dire

Eh bien le sujet principal

Je vais expliquer en me basant sur l'exemple 2.

Exemple 2


a = "Maison de lapin"
b = "Maison de lapin" #Même chaîne qu'un

# ==Comparer avec
print(a == b) # True
#Comparer avec est
print(a is b) # False

print(id(a)) #ID d'objet d'un
print(id(b)) #ID d'objet de b(Renvoie une valeur qui n'est pas la même qu'un)

En Python, toutes les données sont un objet. ʻId () `est une fonction qui renvoie l'identifiant de l'objet argument (ci-après dénommé l'identifiant de l'objet).

== a renvoyé True car ʻa et b étaient __la même chaîne __. Cependant, ʻa est b retourné False, même s'il s'agissait de la même chaîne. C'est parce que ʻis` est un opérateur __ qui compare les identifiants d'objets __.

Vérifie si «==» est __equivalent __. D'autre part, ʻis` vérifie s'il s'agit de __ident __.

La différence est ici

Conseils (il peut être utile de se souvenir)

--L'identifiant de l'objet renvoyé par la fonction id () devient l'adresse de la mémoire dans laquelle réside l'objet lorsqu'il est multiplié par hex (). --Il existe des cas d'exception (voir ci-dessous)

exception

Il suffit de comprendre le contenu ci-dessus, mais il existe des cas d'exception, je vais donc le présenter pour le moment.

Exemple 3


a = 100
b = 100

print(a == b) #Est-ce équivalent
print(a is b) #Est-ce la même

Sera-ce vrai ou faux?

Ceux qui comprennent jusqu'ici sont probablement Vous vous attendez à ce que ʻa == b renvoie True et ʻa is b renvoie False.

Mais __ les deux sont Vrai ... __

Quoi? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

*** Ces opérateurs de comparaison devraient être généralisés, mais il y a des exceptions et ils sont fous. *** ***

Je penserais. Je le pensais au début (´ ・ ω ・ `)

Cependant, il y a une bonne raison à cela. De Objets entiers simples - Documentation Python 2.7.13 --PyObject * PyInt_FromLong

The current implementation keeps an array of integer objects for all integers between -5 and 256

Expliquer en japonais

L'implémentation actuelle de Python contient un tableau d'objets entiers de -5 à 256

Il y a. En d'autres termes, Python garde toujours en mémoire les tableaux de -5 à 256.

Vérification

a = b = range(-6, 258) #-Générer un tableau de 6 à 257

for x,y zip(a, b):
    print(x, x is y) #Comparer si deux valeurs équivalentes sont identiques
résultat
-6 False
-5 True
-4 True
.
.
(Omission)
.
.
255 True
256 True
257 False

Vous avez renvoyé «True» entre -5 et 256 car les identifiants d'objet sont les mêmes. D'autre part, il renvoie «False» pour -6 et 257 (première et dernière valeurs) qui sont hors de la plage de valeurs détenues par la mémoire.

C'est déroutant, mais vous devez vous en souvenir aussi.

Autre Une comparaison entre «True» et «False» retournera toujours «True». En effet, il n'y a toujours qu'un seul "Vrai" et "Faux" en mémoire.

Il y a une autre exception pour autant que je sache, mais je vais l'omettre ici.

Si vous avez des suggestions, laissez-les dans la section commentaires!

Recommended Posts

Que comparez-vous avec Python et ==?
Qu'utilisez-vous lorsque vous testez avec Python?
[Python] Python et sécurité-① Qu'est-ce que Python?
[Python] Qu'est-ce qu'une instruction with?
[Python] Que sont @classmethod et les décorateurs?
Python | Ce que vous pouvez faire avec Python
Que comparez-vous avec Python et ==?
Vérifier si vous êtes un universitaire
Qu'est-ce que python
Qu'est-ce que Python
[Python] Qu'est-ce que la série pandas et DataFrame?
Qu'est-ce que la «programmation fonctionnelle» et «orientée objet»? Édition Python
[Python] Qu'est-ce que Pipeline ...
[Python] Qu'est-ce que virtualenv
Que sont les taples et * args python après tout?
Qu'est-ce que pip et comment l'utilisez vous?
Qu'est-ce que Dieu? Créez un chatbot simple avec python
Ce que vous pouvez et ne pouvez pas faire avec Tensorflow 2.x
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
[Python] * args ** Qu'est-ce que kwrgs?
python avec pyenv et venv
Identité et équivalence: is et == en Python
Fonctionne avec Python et R
Cours de base Python (1 Qu'est-ce que Python)
Que faire si vous exécutez python sur IntelliJ et quittez avec une erreur
Ce que vous pouvez faire avec les statistiques de la bibliothèque Python standard
[Python] Que faites-vous avec la visualisation de 4 variables ou plus?
[Python] Qu'est-ce qu'un tuple? Explique comment utiliser sans toucher et comment l'utiliser avec des exemples.
Python a + = b et a = a + b sont différents
Briller la vie avec Python et OpenCV
[Python] Qu'est-ce qu'une fonction zip?
Robot fonctionnant avec Arduino et python
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Différence entre == et est en python
Scraping avec Node, Ruby et Python
Ravi de vous rencontrer avec python
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
[Python] Qu'est-ce que @? (À propos des décorateurs)
[python] Quelle est la clé triée?
(Débutant) Que sont les cœurs et les threads?
Encodage et décodage JSON avec python
Python pour la déclaration ~ Qu'est-ce qui est itérable ~
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Que faire avec la sortie de PYTHON?
Lire et écrire NetCDF avec Python
J'ai joué avec PyQt5 et Python3
Avez-vous des problèmes avec "pipenv.exceptions.ResolutionFailure"?
À quoi sert le trait de soulignement Python (_)?
Lire et écrire du CSV avec Python
Python> Qu'est-ce qu'une tranche étendue?
Intégration multiple avec Python et Sympy
Jusqu'à ce que Python fonctionne sur Apache
Coexistence de Python2 et 3 avec CircleCI (1.0)
Jeu Sugoroku et jeu d'addition avec Python