Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse des Unterschieds zwischen den Operatoren „==“ und „is“ in Python

Analyse des Unterschieds zwischen den Operatoren „==“ und „is“ in Python

高洛峰
高洛峰Original
2017-03-16 16:21:531027Durchsuche

Vorwort

Bevor Sie über den Unterschied zwischen den beiden Operatorenund == sprechen, müssen Sie zunächst wissen, was das Objekt in Python enthält Die drei Grundelemente sind: id (Identitätsidentifikation), python type() (Datentyp) und value (Wert). Sowohl is als auch == werden zum Vergleichen und Beurteilen von Objekten verwendet, aber der Inhalt des Vergleichs von Objekten ist unterschiedlich. Werfen wir einen Blick auf die spezifischen Unterschiede. Es gibt zwei Methoden in Python, um zu vergleichen, ob zwei Objekte gleich sind. Einfach ausgedrückt sind ihre Unterschiede wie folgt:

is vergleicht zwei

ReferenzenOb es zeigt auf dasselbe Objekt (Referenzvergleich).

== dient zum Vergleich, ob zwei Objekte gleich sind.

Implementierungsprinzip
>>> a = [1, 2, 3]
>>> b = a
>>> b is a # a的引用复制给b,他们在内存中其实是指向了用一个对象
True 
>>> b == a # 当然,他们的值也是相等的
True
>>> b = a[:] # b通过a切片获得a的部分,这里的切片操作重新分配了对象,
>>> b is a # 所以指向的不是同一个对象了
False
>>> b == a # 但他们的值还是相等的
True

vergleicht, ob es sich bei den beiden um dasselbe Objekt handelt. Was also verglichen wird, ist die Speicheradresse (ob die ID dieselbe ist).

== ist ein Wertevergleich. Unveränderliche Objekte wie int, str führen den Wertvergleich direkt durch. Für Objekte, die Python bekannt sind, wird deren eq

-Funktion

zum Vergleich aufgerufen. (Tatsächlich sollten bekannte Objekte auch über die integrierte eq-Funktion verglichen werden.) Wenn bei benutzerdefinierten Objekten die Funktion eq implementiert ist, wird sie zum Vergleich verwendet. Wenn sie nicht implementiert ist, ist der Effekt derselbe wie bei ==.

Python speichert relativ kleine Objekte im Cache. Wenn ein relativ kleines Objekt das nächste Mal verwendet wird, wird es im Cache-Bereich suchen. Wenn es gefunden wird, wird kein neuer Speicher geöffnet, sondern die Suche wird fortgesetzt um das kleine Objekt zwischenzuspeichern. Der Adresse des Objekts wird der neue Wert zugewiesen. Beispiel:
对象缓存机制

Die Zuordnung wird berechnet und nutzt den Pufferbereich nicht. Dies ist aus dem ersten Codebeispiel ersichtlich.
>>> c = 1
>>> d = 1
>>> print(c is d) 
True
 
>>> 1000 is 10**3
False
>>> 1000 == 10**3
True

Für

string

können Sie die Verwendung eines Puffers erzwingen, indem Sie die interne Funktion verwenden.

Das obige ist der detaillierte Inhalt vonAnalyse des Unterschieds zwischen den Operatoren „==“ und „is“ 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