While playing with closures in list comprehension, I found this:
xs = [1, 2, 3]
fs = [lambda: _ for _ in xs]
vs = [_() for _ in fs]
print vs           # [<function <lambda> at 0x020324B0>, <function <lambda> at 0x020D6AB0>, <function <lambda> at 0x020D6AF0>]
print vs[0]        # <function <lambda> at 0x020324B0>
print vs[0]()      # <function <lambda> at 0x020D6AF0>
print vs[0]()()    # <function <lambda> at 0x020D6AF0>
print vs[0]()()()  # <function <lambda> at 0x020D6AF0>
Shouldn't vs containing ints instead of lambdas? 
But if we use different names in the two list comprehensions it will work as expected:
xs = [1, 2, 3]
fs = [lambda: x for x in xs]
vs = [f() for f in fs]
I tested it in Python2.7.5 and Python2.7.8, both gives the same results. (Python3.4.1 work as expected) Is there an explanation for it or is it a bug?
 
     
    