39 Stimmen

Ergebnis des Operators "is": Was passiert gerade?

Ich war ziemlich überrascht, als

[] is not []

bewertet nach True .

Was geschieht in diesem Code? Was wirklich not y is Aussagen machen?

2voto

Gaurang Shah Punkte 10034

Ich weiß, ich bin Posting zu einem ziemlich alten Beitrag. jedoch, dies könnte helfen, jemand stolpern auf diese wie ich.

"is" prüft, ob eine Speicheradresse gleich ist oder nicht, während "==" prüft, ob der Wert gleich ist oder nicht. Das folgende Beispiel macht dies deutlich

Lassen Sie uns zunächst über unveränderliche Objekte sprechen, da diese leicht zu verstehen sind

# could be any immutable object
immutable_a = 10
immutable_b = 10

# prints address of a and b variable
print "address of a is %s" % id(immutable_a)
print "address of a is %s" % id(immutable_b)

# as both addresses is same, following shall be true
print immutable_a is immutable_b

# as the values are also same, following shall be true as well
print immutable_a == immutable_b

Nun zu den veränderbaren Objekten

# could be any mutable object
mutable_a = [10]
mutable_b = [10]

# prints address of a and b variable
print "address of mutable_a is %s" % id(mutable_a)
print "address of mutable_b is %s" % id(mutable_b)

# as addresses are not same, following shall be false
print mutable_a is mutable_b

# as the values are same, following shall be true
print mutable_a == mutable_b

0voto

nauer Punkte 660

@Jiaaro hat Recht. Verwendung von is mit unveränderlichen Datentypen ist gefährlich, da sie aufgrund der Interpreteroptimierung von Python nicht vorhersehbar ist.

Siehe dieses Beispiel:

10 * "a" is 10 * "a"    # True
100 * "a" is 100 * "a"  # False

In der zweiten Zeile ist es schneller, ein neues Objekt mit einer neuen ID für den Interpreter zu erstellen. Verwenden Sie also die is Operator nur bei veränderlichen Typen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X