Stagnant Frame Data?

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Sun Nov 15 11:19:19 EST 2009


On 04:00 pm, __peter__ at web.de wrote:
>Mike wrote:
>>I'll apologize first for this somewhat lengthy example. It does
>>however recreate the problem I've run into. This is stripped-down code
>>from a much more meaningful system.
>>
>>I have two example classes, "AutoChecker" and "Snapshot" that evaluate
>>variables in their caller's namespace using the frame stack. As
>>written, the output is not what is expected: the variables evaluate to
>>"stagnant" values.
>>
>>However, if the one indicated line is uncommented, then the result is
>>as expected.
>>
>>So my questions are: Is this a bug in Python? Is this an invalid use
>>of frame data? Why does the single line "sys._getframe(1).f_locals"
>>fix the behavior?
>
>A simplified demonstration of your problem:
>>>>def f(update):
>...     a = locals()
>...     x = 42
>...     if update: locals()
>...     print a
>...
>>>>f(False)
>{'update': False}
>>>>f(True)
>{'a': {...}, 'x': 42, 'update': True}
>
>The local namespace is not a dictionary, and the locals()/f_locals
>dictionary contains a snapshot of the local namespace. Accessing the
>f_locals attribute is one way to trigger an update of that snapshot.
>
>What's puzzling is that the same dictionary is reused.

http://bugs.python.org/issue6116 is vaguely related.

Jean-Paul



More information about the Python-list mailing list