[Tutor] integers are also objects?
Danny Yoo
dyoo@hkn.eecs.berkeley.edu
Mon, 3 Dec 2001 00:20:59 -0800 (PST)
On Mon, 3 Dec 2001, Remco Gerlich wrote:
> > So my question is that does "==" work on contents in case of
> integers or it works only on references and python makes sure that
> integer references with same content point to the same location, the
> way it works for strings.
>
> Not all strings with the same content point to the same location; some of
> them are cached, but not all of them. Typically only strings that you use as
> literals (the ones you "spell out" in program code) are cached, not strings
> that are the result of a computation.
And if we do want computed string to be cached, we can use the
intern() function:
###
>>> s = "hello world"
>>> s2 = "hello" + " world"
>>> id(s)
135314088
>>> id(s2)
135166088
>>> s = intern(s)
>>> s2 = intern(s2)
>>> id(s)
135314088
>>> id(s2)
135314088
###
> Any == check on any two objects first compares the two references, if
> they're the same then the objects are equal (since they're the same
> object). Only if they're not the same, are the objects then compared
> for value.
If we do want to check to see if two things refer to the same object, we
can use ths 'is' operator:
###
>>> 1 + 1 is 2
1 ## ... but this works just because of the
## caching behavior of small integers.
>>> 1 + 1 == 2
1
>>> 101 + 1 is 102 ## Let's try this on larger numbers
0
>>> 101 + 1 == 102
1
###