[PYTHON] FAQ: Pourquoi la comparaison des nombres est-elle incohérente?

>>> x = 100
>>> y = 100
>>> x == y
True
>>> x is y
True
>>> x = 1000
>>> y = 1000
>>> x == y
True
>>> x is y
False

ce n'est pas la même valeur mais la même comparaison

L'opérateur is compare si la gauche et la droite font référence au même objet. Voir l'exemple suivant.

>>> x = []
>>> y = []
>>> x is y
False
>>> z = x
>>> x is z
True
>>> x.append(42)
>>> y
[]
>>> z
[42]

x et y sont des objets de liste distincts créés séparément. Donc x est y sera faux, et changer x n'affectera pas y.

D'autre part, z fait référence au même objet que x. Donc x est z est Vrai, et changer x (l'objet de liste référencé par) change naturellement aussi z.

Le type entier est immuable

Un objet dont la valeur indiquée par l'objet est déterminée lors de la création de l'objet et ne change pas par la suite est appelé immuable. L'entier est immuable. Consultez l'exemple de code ci-dessous.

>>> x = 42
>>> y = x
>>> x is y
True
>>> x += 1
>>> x
43
>>> y
42
>>> x is y
False

Immédiatement après «y = x», «x est y» était Vrai parce que x et y pointent vers le même objet représentant 42. x + = 1 assigne un autre objet représentant 43 à x. Donc, «x est y» devient Faux.

Modèle de poids mouche

Le modèle Flyweight est utilisé pour l'optimisation lorsque des objets immuables tels que des types entiers sont utilisés en grand nombre. En partageant un objet existant au lieu de créer un objet avec cette valeur chaque fois qu'une nouvelle valeur est nécessaire

Il y a des mérites tels que.

(À partir du 07/09/2016) En CPython, les entiers de -5 à 256 sont gérés par le modèle de poids volumique, et le même objet est toujours utilisé. Par conséquent, si la valeur est dans cette plage, «x est y» peut être Vrai même pour les objets qui auraient dû être créés séparément.

Recommended Posts

FAQ: Pourquoi la comparaison des nombres est-elle incohérente?
Pourquoi le premier argument de la classe [Python] est-il self?
Raisons pour lesquelles le cryptage hybride est utilisé (comparaison des vitesses de cryptage / décryptage)
Y a-t-il un secret dans la fréquence des nombres de rapport de circonférence?
La loterie est-elle rentable? ~ LOTO7 et la loi des grands nombres ~
La probabilité de précipitation est-elle correcte?
Science "Saito est-il le représentant de Saito?"
Si la précision du test PCR est mauvaise, pourquoi ne pas répéter le test?
Quelle est la cause de l'erreur suivante?
[python] [meta] Le type de python est-il un type?
Pourquoi l'entropie croisée est-elle utilisée pour la fonction objective du problème de classification?
Astuces: Comparaison de la taille de trois valeurs
La barre oblique arrière du clavier japonais est "ro"
La réponse de "1/2" est différente entre python2 et 3
L'origine de Manjaro Linux est "Mount Kirimandjaro"
La valeur de pyTorch torch.var () n'est pas distribuée
Ceci est le seul examen de base de Python ~ 1 ~
Ceci est le seul examen de base de Python ~ 2 ~
Ceci est le seul examen de base de Python ~ 3 ~
Gratter les données gagnantes de Numbers à l'aide de Docker
J'ai réfléchi à la raison pour laquelle Python self est nécessaire avec le sentiment d'un interpréteur Python
Autour de l'endroit où la valeur d'Errbot est stockée
Le problème Zip 4 Gbyte est une histoire du passé
Qu'est-ce qu'un moteur de recommandation? Résumé des types
Quand vous pensez que la mise à jour de ManjaroLinux est étrange
La méthode de copie de pandas.DataFrame est une copie profonde par défaut