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

comparison, equality, identity, python, string

Solution

`is` is identity testing, and `==` is equality testing. What happens in your code would be emulated in the interpreter like this:

>>> a = 'pub'
>>> b = ''.join(['p', 'u', 'b'])
>>> a == b
True
>>> a is b
False

So, no wonder they're not the same, right?

In other words: `a is b` is the equivalent of `id(a) == id(b)`

Problem

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?

Original source

Related problems