[Tutor] pointer puzzlement

Dave Angel davea at davea.name
Fri May 8 03:42:35 CEST 2015


On 05/07/2015 07:51 PM, Dave Angel wrote:
> On 05/07/2015 04:54 PM, Jim Mooney Py3.4.3winXP wrote:
>> On 7 May 2015 at 13:03, Emile van Sebille <emile at fenx.com> wrote:
>>
>>> Compare to:
>>>
>>> def testid(K=1000000):
>>>       K += 10
>>>       return 'the ID is', id(K), K
>>>
>>
>> Ah, thanks. I forgot small integers are saved in a table. I was
>> looking at
>> a demo that pointers to defaults in function parameters are persistent.
>
> Python doesn't have pointers, and nothing here is persistent.
> Persistence refers to a value surviving multiple invocations of a program.
>

I think the term you're looking for is "static lifetime".  That object 
will exist for the life of the program.  The local variable name K is 
bound to that object each time the function is called without an argument.

>
>> It
>> used lists so I tried ints. Although I realized persistence also works
>> for
>> dicts ;')
>>
>> def testid(newitem, K={}):
>>       K[newitem] = newitem + 'item'
>>       return 'the ID is', id(K), K
>>
>>>>> testid('bonk')
>> ('the ID is', 18263656, {'bonk': 'bonkitem'})
>>>>> testid('clonk')
>> ('the ID is', 18263656, {'bonk': 'bonkitem', 'clonk': 'clonkitem'})
>>>>> testid('spam')
>> ('the ID is', 18263656, {'bonk': 'bonkitem', 'clonk': 'clonkitem',
>> 'spam':
>> 'spamitem'})
>
> The object is not immutable, so it can change.  Therefore the += does an
> in-place change, and you keep the same id.
>
>


-- 
DaveA


More information about the Tutor mailing list