Warum produziert der Vergleich von Strings mithilfe von entweder '==' oder 'is' manchmal ein unterschiedliches Ergebnis?

Warum führt der Vergleich von Strings mit entweder '==' oder 'is' manchmal zu einem anderen Ergebnis? Stellen Sie Code-Schnipsel bereit

Wenn Strings mit dem '=='-Operator verglichen werden, erfolgt der Vergleich auf der Grundlage der tatsächlichen Zeichen im String. Zum Beispiel:

string1 = "Hallo"
string2 = "Hallo"
string3 = "hallo"

print(string1 == string2) # True
print(string1 == string3) # False

Auf der anderen Seite, wenn Strings mit dem 'is'-Operator verglichen werden, erfolgt der Vergleich auf der Grundlage der Speicheradressen der Strings. Das bedeutet, dass, wenn zwei Strings in Bezug auf die enthaltenen Zeichen identisch sind, aber an unterschiedlichen Speicherorten gespeichert sind, sie beim Verwenden des 'is'-Operators als unterschiedlich angesehen werden. Zum Beispiel:

string1 = "Hallo"
string2 = "Hallo"
string3 = "".join(["H", "a", "l", "l", "o"])

print(string1 is string2) # True
print(string1 is string3) # False

In diesem Beispiel enthalten sowohl string1 als auch string2 die gleichen Zeichen, aber string3 wird durch das Zusammenfügen von einzelnen Zeichen erstellt, so dass es an einem anderen Speicherort gespeichert wird. Daher werden string1 und string3, obwohl sie in Bezug auf ihre Zeichen identisch sind, beim Verwenden des 'is'-Operators als unterschiedlich angesehen.