[Tutor] pointer puzzlement
Dave Angel
davea at davea.name
Fri May 8 01:47:54 CEST 2015
On 05/07/2015 03:15 PM, Jim Mooney Py3.4.3winXP wrote:
> I find this a bit confusing. Since the ID of K remains the same, so it's
> the same object, why isn't it increasing each time. i.e, 20, 30, 40,. I
> understand that it's immutable but doesn't that mean K is created each time
> in local scope so it should have a different ID each time?
>
> def testid(K=10):
> K += 10
> return 'the ID is', id(K), K
>
> *** Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600
> 32 bit (Intel)] on win32. ***
>>>> testid()
> ('the ID is', 505991936, 20)
>>>> testid()
> ('the ID is', 505991936, 20)
>>>> testid()
> ('the ID is', 505991936, 20)
>>>>
>
K is certainly created new each time, but it is bound to the same
object, the one created when the function is defined.
K does not have an id(), that object does.
Since the object in this case is immutable, the += creates a new object
and binds that to K. In your particular code, you never call the id()
for the initialization object. I'd add another print, that shows the
id(K) before the +=
All of this is confused by the fact that small ints happen to be
interned by your paricular implementation. So you're getting the same
<int=20> object each time.
--
DaveA
More information about the Tutor
mailing list