storing references instead of copies in a dictionary

mk mrkafk at
Thu Jul 17 13:45:06 CEST 2008

Hello everyone,

I'm storing functions in a dictionary (this is basically for cooking up 
my own fancy schmancy callback scheme, mainly for learning purpose):

 >>> def f2(arg):
...     return "f2 " + arg
 >>> def f1(arg):
...     return "f1" + arg

 >>> a={'1': f1, '2': f2}
 >>> [ x[1](x[0]) for x in a.items() ]
['f11', 'f2 2']

Well, neat. Except if I change function definitions now, old functions 
are called. And rightly:

{'1': <function f1 at 0xb7f0ba04>, '2': <function f2 at 0xb7f0b9cc>}
 >>> f1
<function f1 at 0xb7f0ba04>
 >>> def f1(arg):
...     return "NEW f1 " + arg
 >>> f1
<function f1 at 0xb7f0b994>

The address of function f1 has obviously changed on redefinition.

Storing value copies in a dictionary on assignment is a reasonable 
default behaviour.

However, in this particular case I need to specifically store 
_references to objects_ (e.g. f1 function), or should I say _labels_ 
(leading to objects)?

Of course, I can basically update the dictionary with a new function 

But I wonder, is there not a way _in general_ to specifically store 
references to functions/variables/first-class objects instead of copies 
in a dictionary?

More information about the Python-list mailing list