It's an implementation detail of small strings without spaces and
small numbers. You're more likely to reuse those values, so Python
caches them. You shouldn't rely on it. It's not guaranteed to stay the
same between different implementations, or even different versions of
CPython.
It also relies on the implementation detail that the CPython bytecode
has peephole optimisation applied to it:
| Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit
(Intel)] on win32
| Type "help", "copyright", "credits" or "license" for more
information.
| >>> def foo():
| ... return '11' + '1' is '111'
| ...
| >>> import dis
| >>> dis.dis(foo)
| 2 0 LOAD_CONST 4 ('111')
| 3 LOAD_CONST 3 ('111')
| 6 COMPARE_OP 8 (is)
| 9 RETURN_VALUE
| >>> def bar():
| ... a = '11'
| ... b = '1'
| ... return a + b is '111'
| ...
| >>> dis.dis(bar)
| 2 0 LOAD_CONST 1 ('11')
| 3 STORE_FAST 0 (a)
|
| 3 6 LOAD_CONST 2 ('1')
| 9 STORE_FAST 1 (b)
|
| 4 12 LOAD_FAST 0 (a)
| 15 LOAD_FAST 1 (b)
| 18 BINARY_ADD
| 19 LOAD_CONST 3 ('111')
| 22 COMPARE_OP 8 (is)
| 25 RETURN_VALUE
| >>> foo()
| True
| >>> bar()
| False
| >>>
In general, whether (expression1 is expression2) is true or false is
not useful knowledge when the expressions result in "scalars" like
str, int, float.