It's a little more complicated than you make it out to be. For instance, in your examples with large integers, the same object is not reused when the uses aren't part of the same expression.
>>> a = 7734
>>> b = 7734
>>> a is b
False
On the other hand, as your first example shows, this does work with strings...but not all strings.
>>> a = "this string includes spaces"
>>> b = "this string includes spaces"
>>> a is b
False
The following objects are actually interned by default: small integers, the empty tuple, and strings that look like Python identifiers. What you're seeing with large integers and other immutable objects is an optimization due to the fact that they're being used in the same expression.