Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung der Operatoren „==' und „is' in Python

Detaillierte Erklärung der Operatoren „==' und „is' in Python

WBOY
WBOYOriginal
2016-12-05 13:27:201169Durchsuche

Vorwort

Bevor Sie über den Unterschied zwischen den beiden Operatoren is und == sprechen, müssen Sie zunächst die drei Grundelemente kennen, die in Objekten in Python enthalten sind, nämlich: id (Identität), python type() (Datentyp) und value( value ). Sowohl is als auch == werden zum Vergleichen und Beurteilen von Objekten verwendet, der Inhalt des Objektvergleichs und der Objektbeurteilung ist jedoch 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:

dient zum Vergleich, ob zwei Referenzen auf dasselbe Objekt verweisen (Referenzvergleich).

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

>>> 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

Grundsatz der Umsetzung

Es wird verglichen, ob die beiden dasselbe Objekt sind. Was also verglichen wird, ist die Speicheradresse (ob die ID identisch ist).

== ist ein Wertevergleich. Unveränderliche Objekte wie int, str vergleichen Werte direkt. Für Objekte, die Python bekannt sind, wird deren Funktion __eq__ zum Vergleich aufgerufen. (Tatsächlich sollten bekannte Objekte auch über die integrierte Funktion __eq__ verglichen werden.) Wenn bei benutzerdefinierten Objekten die Funktion __eq__ implementiert ist, wird sie verglichen. Wenn sie nicht implementiert ist, ist der Effekt derselbe wie bei ==.

Objekt-Caching-Mechanismus

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 Adresse wird weiterhin zugewiesen kleines Objekt zum neuen Objekt. Beispiel:

>>> c = 1
>>> d = 1
>>> print(c is d) 
True
 
>>> 1000 is 10**3
False
>>> 1000 == 10**3
True

Die berechnete Zuordnung nutzt den Pufferbereich nicht. Dies ist aus dem ersten Codebeispiel ersichtlich.

Für Strings können Sie die Verwendung eines Puffers erzwingen, indem Sie die Funktion intern verwenden.

Zusammenfassung

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für das Studium oder die Arbeit von Nutzen sein kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen.

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