Was vergleichst du mit Python und ==?

Nun, ich denke, dass die Tatsache, dass sie nicht gleich sind, ziemlich allgegenwärtig ist, Dann möchte ich erklären, was zum Teufel Sie vergleichen.

Es scheint, dass der Artikel immer Fehler enthält. Ich würde mich freuen, wenn Sie darauf hinweisen könnten (ich würde mich freuen, wenn es Feedback gäbe).

Unterschied zwischen == und ist

Ich werde es kurz erklären (wenn Sie es verstehen, können Sie es überspringen) Schauen Sie sich zuerst Beispiel 1 an

Beispiel 1


a = "Kaninchenhaus"
b = "Kaninchenhaus" #Gleiche Zeichenfolge wie a
c = "Kantoan" #Zeichenfolge anders als a

#a und c==Vergleichen mit
print(a == c) # False
#Vergleiche a und c mit is
print(a is c) # False

#A und B==Vergleichen mit
print(a == b) # True
#Vergleiche a und b mit is
print(a is b) # False

Da "Rabbit House" und "Kantoan" natürlich unterschiedlich sind, sind "a == c" und "a is c" beide "False".

Auf der anderen Seite sehen "a" und "b" auf den ersten Blick gleich aus, aber ... True wenn a == b False wenn a b ist

Das Ergebnis ist anders

Was meinst du

Nun, das Hauptthema

Ich werde anhand von Beispiel 2 erklären.

Beispiel 2


a = "Kaninchenhaus"
b = "Kaninchenhaus" #Gleiche Zeichenfolge wie a

# ==Vergleichen mit
print(a == b) # True
#Vergleiche mit is
print(a is b) # False

print(id(a)) #Objekt-ID von a
print(id(b)) #Objekt-ID von b(Gibt einen Wert zurück, der nicht mit a identisch ist)

In Python sind alle Daten ein Objekt. id () ist eine Funktion, die die ID des Argumentobjekts zurückgibt (im Folgenden als Objekt-ID bezeichnet).

== gab True zurück, weil a und b __ dieselbe Zeichenfolge __ waren. "A is b" wird jedoch "False" zurückgegeben, obwohl es sich um dieselbe Zeichenfolge handelt. Dies liegt daran, dass is ein __- Operator ist, der __-Objekt-IDs vergleicht.

Überprüft, ob == __äquivalent __ ist. Auf der anderen Seite prüft is auf identity.

Der Unterschied ist hier

Tipps (kann nützlich sein, um sich zu erinnern)

Ausnahme

Es reicht aus, die oben genannten Inhalte zu verstehen, aber es gibt Ausnahmefälle, daher werde ich sie vorerst vorstellen.

Beispiel 3


a = 100
b = 100

print(a == b) #Ist es gleichwertig?
print(a is b) #Ist es das Gleiche

Wird es wahr oder falsch sein?

Diejenigen, die bisher verstehen, sind wahrscheinlich Sie würden erwarten, dass "a == b" "True" zurückgibt und "a is b" "False" zurückgibt.

Aber __ beide sind "wahr" ... __

Was? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

*** Diese Vergleichsoperatoren sollten verallgemeinert werden, aber es gibt Ausnahmen und sie sind verrückt. *** ***

Ich würde denken. Das dachte ich zuerst (´ ´ ω ・ `)

Dafür gibt es aber einen guten Grund. Aus der Plain Integer Objects - Python 2.7.13-Dokumentation - PyObject * PyInt_FromLong

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

Auf Japanisch erklären

Die aktuelle Implementierung von Python enthält ein Array von Ganzzahlobjekten von -5 bis 256

Es gibt. Mit anderen Worten, Python speichert Arrays immer von -5 bis 256 im Speicher.

Überprüfung

a = b = range(-6, 258) #-Generieren Sie ein Array von 6 bis 257

for x,y zip(a, b):
    print(x, x is y) #Vergleichen Sie, ob zwei äquivalente Werte gleich sind
Ergebnis
-6 False
-5 True
-4 True
.
.
(Unterlassung)
.
.
255 True
256 True
257 False

Sie haben zwischen -5 und 256 "True" zurückgegeben, da die Objekt-IDs identisch sind. Andererseits gibt es "False" für -6 und 257 (erster und letzter Wert) zurück, die außerhalb des vom Speicher gehaltenen Wertebereichs liegen.

Es ist verwirrend, aber Sie sollten sich auch daran erinnern.

Andere Der Vergleich zwischen "True" und "False" gibt immer "True" zurück. Dies liegt daran, dass immer nur ein "Wahr" und "Falsch" im Speicher ist.

Soweit ich weiß, gibt es eine weitere Ausnahme, die ich hier jedoch weglassen werde.

Wenn Sie Vorschläge haben, hinterlassen Sie diese bitte im Kommentarbereich!

Recommended Posts

Was vergleichst du mit Python und ==?
Was verwenden Sie beim Testen mit Python?
[Python] Python und Sicherheit - is Was ist Python?
[Python] Was ist eine with-Anweisung?
[Python] Was sind @classmethod und Dekorateure?
Python | Was Sie mit Python machen können
Was vergleichst du mit Python und ==?
Überprüfen Sie, ob Sie ein Gelehrter sind
Was ist Python?
Was ist Python?
[Python] Was ist Pandas Series und DataFrame?
Was ist "funktionale Programmierung" und "objektorientiert"? Python Edition
[Python] Was ist Pipeline ...
[Python] Was ist virtualenv?
Was sind Python Taples und * Args?
Was ist pip und wie benutzt du es?
Was ist Gott? Erstelle einen einfachen Chatbot mit Python
Was Sie mit Tensorflow 2.x tun können und was nicht
Ver- und Entschlüsselung mit Python
Python und Hardware-Verwenden von RS232C mit Python-
[Python] * args ** Was ist kwrgs?
Python mit Pyenv und Venv
Identität und Äquivalenz: ist und == in Python
Funktioniert mit Python und R.
Python-Grundkurs (1 Was ist Python?)
Was tun, wenn Sie Python auf IntelliJ ausführen und mit einem Fehler beenden?
Was können Sie mit den Standardstatistiken der Python-Bibliothek tun?
[Python] Was machen Sie mit der Visualisierung von 4 oder mehr Variablen?
[Python] Was ist ein Tupel? Erklärt, wie man es benutzt und wie man es benutzt, ohne zu tippen.
Python a + = b und a = a + b sind unterschiedlich
Leuchtendes Leben mit Python und OpenCV
[Python] Was ist eine Zip-Funktion?
Roboter läuft mit Arduino und Python
Neuronales Netzwerk mit OpenCV 3 und Python 3
AM-Modulation und Demodulation mit Python
Unterschied zwischen == und ist in Python
Scraping mit Node, Ruby und Python
Schön dich mit Python zu treffen
Scraping mit Python, Selen und Chromedriver
Kratzen mit Python und schöner Suppe
[Python] Was ist @? (Über Dekorateure)
[Python] Was ist der sortierte Schlüssel?
(Anfänger) Was sind Kerne und Threads?
JSON-Codierung und -Decodierung mit Python
Python für Anweisung ~ Was ist iterierbar ~
Hadoop-Einführung und MapReduce mit Python
[GUI in Python] PyQt5-Drag & Drop-
Was tun mit PYTHON Release?
Lesen und Schreiben von NetCDF mit Python
Ich habe mit PyQt5 und Python3 gespielt
Haben Sie Probleme mit "pipenv.exceptions.ResolutionFailure"?
Wofür ist der Python-Unterstrich (_)?
Lesen und Schreiben von CSV mit Python
Python> Was ist ein erweitertes Slice?
Mehrfachintegration mit Python und Sympy
Bis Python auf Apache läuft
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Sugoroku-Spiel und Zusatzspiel mit Python