(OTOH, deletions of actual local bindings do seem to propagate back into a previously bound value of locals on exit, and a new call to locals() seems to return the same identical object as before, so I'm not sure I believe the <type 'dict'>, unless it has a special slot and it is automatically updated at exit. But a local bare name assignment or deletion doesn't immediately propagate. But it does on exit. So the <type 'dict'> returned by locals() has a special relationship to the function it reflects, if it is otherwise a normal dict:
CPython frames keep two copies of their locals around - the "fast" locals, which are actually used by the code (and stored in an array for fast access, hence the name), and a Python-readable copy in a dictionary (this is the dictionary returned by locals()).
Various things trigger updates from the fast locals to the locals dictionary. Updates in the other direction are far less common (exec without an 'in' clause, star imports, and monkeying with the frame via the C API are the only cases I am aware of).
Cheers, Nick.
-- Nick Coghlan | [EMAIL PROTECTED] | Brisbane, Australia --------------------------------------------------------------- http://boredomandlaziness.skystorm.net -- http://mail.python.org/mailman/listinfo/python-list