Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Analyse von is und == in Python (mit Code)

Detaillierte Analyse von is und == in Python (mit Code)

不言
不言nach vorne
2019-03-21 16:03:372481Durchsuche

Dieser Artikel bietet Ihnen eine detaillierte Analyse von is und == in Python (mit Code). Ich hoffe, dass er für Freunde hilfreich ist.

Alles in Python ist ein Objekt.

Die drei Grundelemente, die in Objekten in Python enthalten sind, sind:

  • id (Identität)
  • Typ (Datentyp)
  • value(value)

Um zu vergleichen, ob Objekte gleich sind, können Sie == oder is verwenden.

is und == werden beide zum Vergleichen und Beurteilen von Objekten verwendet, aber der Inhalt des Objektvergleichs und der Objektbeurteilung ist unterschiedlich. Schauen wir uns die spezifischen Unterschiede an.

Es wird verglichen, ob die ID-Werte der beiden Objekte gleich sind, das heißt, ob die beiden Objekte dasselbe Instanzobjekt sind und auf dieselbe Speicheradresse verweisen.

== vergleicht, ob die Inhalte zweier Objekte gleich sind. Standardmäßig wird die __eq__-Methode des Objekts aufgerufen.

== ist ein Vergleichsoperator unter den Python-Standardoperatoren, der zum Vergleichen und Bestimmen der Werte zweier Objekte verwendet wird.

Schauen wir uns zunächst ein Beispiel an

>>> a = [1, 2, 3]
>>> b = a
>>> b is a 
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True

ist auch als Identitätsoperator bekannt, also ob die IDs gleich sind.

Sehen Sie sich den Code unten an. Die IDs der Variablen a und b sind unterschiedlich, also ist b == a wahr, b ist a falsch.

Sehen Sie sich noch einmal ihre IDs an:

>>> id(a)
4364243328
>>> 
>>> id(b)
4364202696

In welchen Fällen haben und == genau das gleiche Ergebnis?

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a == b
True
>>> a = 1000
>>> b = 10**3
>>> a == b
True
>>> a is b
False
>>>

Die Zahlentypen sind also nicht genau gleich.

Warum ist es dann bei 256 dasselbe, aber bei 1000 anders?

Aus Leistungsgründen hat Python viele interne Optimierungsarbeiten durchgeführt. Für ganzzahlige Objekte speichert Python einige häufig verwendete ganzzahlige Objekte in einer verknüpften Liste mit dem Namen small_ints Ein Ort, der auf diese ganzzahligen Objekte verweisen muss, erstellt keine neuen Objekte mehr, sondern verweist direkt auf die Objekte im Cache.

Python fügt diese kleinen Objekte, die häufig im Bereich [-5, 256] verwendet werden, in small_ints ein. Wenn Sie einige kleine Ganzzahlen verwenden müssen, nehmen Sie sie einfach von hier und erstellen Sie nicht mehr vorübergehend neue Objekte .

>>> c = 'miracle.young'
>>> d = 'miracle.young'
>>> c is d
False
>>> c == d
True
>>> c = 'miracleyoung'
>>> d = 'miracleyoung'
>>> c is c
True
>>> c == d
True

Die String-Typen sind also nicht genau gleich, das hängt mit der Interpreter-Implementierung zusammen.

>>> a = (1,2,3) # a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> a = [1,2,3] # a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> a = {'miracle':100,'young':1} # a和b为dict类型
>>> b = {'miracle':100,'young':1}
>>> a is b
False
>>> a = set([1,2,3]) # a和b为set类型
>>> b = set([1,2,3])
>>> a is b
False

Wenn es sich bei der Variablen also um eine Zahl, einen String, ein Tupel, eine Liste oder ein Wörterbuch handelt, sind is und == unterschiedlich und können nicht austauschbar verwendet werden! Wenn Sie Werte vergleichen, sollten Sie == verwenden, und wenn Sie vergleichen, ob es sich um dieselbe Speicheradresse handelt, sollten Sie is verwenden.
Natürlich gibt es in der Entwicklung viele Vergleichsfälle.

Dieser Artikel ist hier zu Ende. Weitere spannende Inhalte finden Sie in der Spalte Python-Tutorial-Video auf der chinesischen PHP-Website!

Das obige ist der detaillierte Inhalt vonDetaillierte Analyse von is und == in Python (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen