The type of non-heap types can be changed in 3.5. This means that the type of cached immutable objects such as small ints, empty or 1-character strings, etc can be changed.
>>> class I(int):
... __slots__ = ()
... def __repr__(self):
... return 'Answer to The Ultimate Question of Life, the Universe, and Everything'
... def __add__(self, other):
... return self * other
...
>>> (42).__class__ = I
>>> ord('*')
Answer to The Ultimate Question of Life, the Universe, and Everything
>>> x = 42; x + 2
84
>>> class S(str):
... __slots__ = ()
... def __len__(self):
... return 123
...
>>> 'a'.__class__ = S
>>> i = 1; len('abc'[:i])
123