[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