Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielanalyse des Unterschieds zwischen is und == in Python

Beispielanalyse des Unterschieds zwischen is und == in Python

Y2J
Y2JOriginal
2017-04-21 16:06:451066Durchsuche

In Python prüft es, ob zwei Objekte dasselbe Objekt sind, und == prüft, ob sie gleich sind. Es ist ganz einfach, es anhand spezifischer Beispiele zu analysieren.

In Python wird überprüft, ob Wenn zwei Objekte (Variablen) gleich sind, können Sie die Operationen „is“ und „==“ verwenden, aber was ist der Unterschied zwischen ihnen? Wann sollte „is“ und wann „==“ verwendet werden? Während des Interviews stellte ich fest, dass viele Kandidaten Schwierigkeiten hatten, die beiden klar zu erklären. Daher bietet „The Zen of Python“ eine ausführliche und leicht verständliche vergleichende Einführung in die beiden.

Nehmen wir zuerst ein Beispiel

Xiao Huang war in letzter Zeit sehr wohlhabend und hat viel Geld ausgegeben, um einen P90D Tesla zu kaufen. Nennen wir dieses Auto vorübergehend „Little P“. genau das gleiche wie das Auto von Lao Wang nebenan (das Auto heißt „Xiao Wang“). Es hat das gleiche Modell, das gleiche Aussehen und den gleichen Preis und wird in der gleichen Charge hergestellt. Hier können wir sagen, dass „Little P“ und „Little Wang“ zwei identische und gleiche Vehikel (euqal) sind, aber im Wesentlichen sind sie zwei verschiedene Objekte. Eines Tages gab Xiaojun seinem Auto einen anderen Namen: „Aiju“. Wenn wir „Xiao P“ sagen, sprechen wir tatsächlich von „Aiju“, weil sich die beiden Namen im Wesentlichen auf dasselbe Auto beziehen, hier nennen wir „Little P“. „ und „Aiju“ völlig gleich (identisch).

In Python kann der Unterschied zwischen „==“ und „is“ mit diesem Beispiel verglichen werden. Ersteres ist ein Gleichheitsvergleich, der vergleicht, ob die Werte in zwei Objekten gleich sind, und letzteres ist ein Konsistenzvergleich. Es wird verglichen, ob die Speicheradressen der beiden Objekte gleich sind.

Wenn die Speicheradressen gleich sind, müssen ihre Werte natürlich auch gleich sein. Wenn also „is“ True zurückgibt, muss „==“ auch True zurückgeben, aber nicht umgekehrt .

Reden ist billig, zeig mir den Code

Erstellen Sie zuerst ein Listenobjekt, weisen Sie ihm dann einen Namen a zu und definieren Sie dann eine weitere Variable b, die auf dasselbe Objekt zeigt.

>>> a = [1, 2, 3]
>>> b = a

Die gedruckten Werte von a und b sind gleich, da diese beiden Variablen auf dasselbe Objekt verweisen, genau wie wenn man einem Auto zwei verschiedene Namen gibt.

>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

Natürlich ist beides und == true.

>>> a == b
True
>>> a is b
True

Erstellen Sie ein neues Objekt. Obwohl die Werte gleich sind, handelt es sich im Wesentlichen um zwei verschiedene Objekte und befinden sich in zwei verschiedenen Speicherbereichen, sodass „is“ „Falsch“ zurückgibt.

>>> c = [1,2,3]
>>> a is c
False

Ja und nur wenn die beiden verglichenen Variablen auf dasselbe Objekt zeigen, gibt „is“ True zurück und „==“ hängt letztendlich von der eq()-Methode des Objekts ab, im Wesentlichen zwei Variablen Die Vergleichsoperation „==" ruft die eq()-Methode des Objekts auf. Beispiel:

>>> class Foo(object):
    def eq(self, other):
      return True

>>> f = Foo()
>>> f == 1
True
>>> f == None
True
>>> f is None
False

Da die eq-Methode der benutzerdefinierten Klasse Foo immer True zurückgibt, gibt „==" bei jedem Objekt True zurück. It und None sind zwei verschiedene Objekte, daher gibt die Operation „is“ „False“ zurück.

Abschließend denken Sie bitte über diesen Code nach und warum der gleiche Vorgang zu unterschiedlichen Ergebnissen führt

>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = 123
>>> b = 123
>>> a is b
True

Zusammenfassung:

Wenn Sie vergleichen möchten Verwenden == um zu sehen, ob zwei Werte gleich sind.

Tatsächlich sind die von is in Python verglichenen Objekte den Zeigern in der C-Sprache sehr ähnlich Zeiger mit derselben Adresse sind derselbe Zeiger.

Das obige ist der detaillierte Inhalt vonBeispielanalyse des Unterschieds zwischen is und == in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn