is is identity testing,
== 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:
is is the
id(a) == id(b)