[Python-Dev] Should vars() return modifiable dict?

Steven D'Aprano steve at pearwood.info
Fri Oct 5 15:47:12 CEST 2012


On 05/10/12 22:58, Nick Coghlan wrote about locals():

> As for *why* changes don't get written back, it's because the compiler
> is allowed to assume it knows about every variable name that exists in
> the local scope (by design), and that doesn't fit with writable
> locals() for functions.

And to be clear, that is implementation-dependent. IronPython locals()
does write back to local variables.

Trying to modify locals() can lead to some really unintuitive behaviour.
For example, in CPython 3.2:

py> def test():
...     x = 1
...     locals()['x'] = 2  # writing to locals has no effect
...     locals()['y'] = 3  # except when it does...
...     print(x, locals())
...
py> test()
1 {'y': 3, 'x': 1}



-- 
Steven


More information about the Python-Dev mailing list