I am experiencing a strange behavior of a built-in function locals() in Python. It is hard to explain exactly, but please take a look at a code:
def Main():
  def F(l=locals()):  print 'F', id(l), l
  a= 100
  F()
  print '1', id(locals()), locals()
  F()
In the local function F, I am assigning locals() into l as a default value for enclosure.  Since locals() is a dict, its reference is copied to l.  So the last three lines should have the same result.
However the result is like this:
F 139885919456064 {}
1 139885919456064 {'a': 100, 'F': <function F at 0x7f39ba8969b0>}
F 139885919456064 {'a': 100, 'F': <function F at 0x7f39ba8969b0>}
The three print statements are called at almost the same time, and id of locals() and l are the same, but the first l used in F does not have content.
I cannot understand why this happened. Can anyone explain this phenomenon? Or is this a known/unknown bug?
Many thanks!
 
    