Sie verwenden einen Identitätsvergleich. == ist wahrscheinlich, was Sie wollen. Die Ausnahme ist, wenn Sie überprüfen möchten, ob ein Objekt und ein anderes das GENAUE gleiche Objekt und an der gleichen Speicherposition sind. In Ihren Beispielen sind die Elemente nicht identisch, da eines von einem anderen Typ ist (my_string) als das andere (string). Auch gibt es keine Klasse. __is__
in Python (es sei denn natürlich, du hast es selbst dort). Wenn das der Fall wäre, wäre das Vergleichen von Objekten mit nicht zuverlässig, um einfach die Speicherorte zu vergleichen.
Als ich zum ersten Mal auf das Stichwort stieß, verwirrte es mich auch. Ich hätte gedacht, dass ist und == waren nicht anders. Sie erzeugten die gleiche Ausgabe vom Interpreter für viele Objekte. Diese Art der Annahme ist eigentlich genau was ist ... ist für. Es ist das Python-Äquivalent "Hey, verwechselt diese beiden Objekte nicht. Sie sind anders.", Was im Wesentlichen das ist, [wer immer es war, der mich auseinandernahm]. Anders formuliert, aber ein Punkt == der andere Punkt.
der für einige hilfreiche Beispiele und etwas Text mit den manchmal verwirrenden Unterschiede Besuch a document from python.org's mail host geschrieben von „Danny Yoo“
oder zu helfen, wenn diese offline ist, die unlisted pastebin verwende ich davon Körper gemacht.
, falls sie in etwa 20 oder so blau Monde (blau Monde ein reales Ereignis ist), sind beide nach unten, werde ich die Beispiele Code zitiere
###
>>> my_name = "danny"
>>> your_name = "ian"
>>> my_name == your_name
0 #or False
###
###
>>> my_name[1:3] == your_name[1:3]
1 #or True
###
###
>>> my_name[1:3] is your_name[1:3]
0
###
ich in der Vergangenheit beobachtet haben, dass Zeichenfolge Internierung für Laufzeit passieren kann berechnet und Eingabewerte, wenn sie ausreichend kurz sind. 'a' * 100 ist nicht 'a' * 100; aber 'a' * 20 ist "a" * 20. In der Zwischenzeit ist 'a'.upper() nicht' a'.upper(). Jython, IronPython, PyPy und andere können aggressiver arbeiten. Kurz gesagt ist es abhängig von der Implementierung. Wenn Sie die 'intern()' - Funktion für Strings aufrufen, wird "erzwungen", dass eine Zeichenkette die gleiche Objektidentität wie jede äquivalente und zuvor intern() 'd Zeichenkette hat, wie Sie sagen. Ich kenne jedoch keinen gültigen Anwendungsfall zum Testen der Zeichenfolgenidentität. (Mögliche Leistung beiseite). –