Re:Exposing Python 3.6's Private Dict Version
by sabauma on Sunday May 28, 2017 @08:21PM
(#14436719)
The REPL essentially operates at the global scope, which is represented as a dictionary. Variables local to a function are not stored in a dictionary, however:
Which prints
[ Parent
| on HN ]
That's because the compiler doesn't know the locals() dictionary will be modified at runtime, so it treats b as a global variable (which happens to be undefined).
To show that not even changes to existing local variables work, try
def main():
a = 1
d = locals()
print d
b = None
d['b'] = 123
print b
print d
print locals()
print d is locals()
which prints {'a': 1}
None
{'a': 1, 'b': 123}
{'a': 1, 'b': None, 'd': {...}}
True
I.e. changes to the dictionary returned by locals() are ignored, and calling locals() again overrides the previous values.