Why does comparing strings using either '==' or 'is' sometimes produce a different result?

Viewed 1634458

Two string variables are set to the same value. s1 == s2 always returns True, but s1 is s2 sometimes returns False.

If I open my Python interpreter and do the same is comparison, it succeeds:

>>> s1 = 'text'
>>> s2 = 'text'
>>> s1 is s2
True

Why is this?

15 Answers

The basic concept we have to be clear while approaching this question is to understand the difference between is and ==.

"is" is will compare the memory location. if id(a)==id(b), then a is b returns true else it returns false.

so, we can say that is is used for comparing memory locations. Whereas,

== is used for equality testing which means that it just compares only the resultant values. The below shown code may acts as an example to the above given theory.

code

Click here for the code

In the case of string literals(strings without getting assigned to variables), the memory address will be same as shown in the picture. so, id(a)==id(b). remaining this is self-explanatory.

Related