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 <em...@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
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to