Today I explored a weird behavior of Python. An example:
closures = []
for x in [1, 2, 3]:
# store `x' in a "new" local variable
var = x
# store a closure which returns the value of `var'
closures.append(lambda: var)
for c in closures:
print(c())
The above code prints
3
3
3
But I want it to print
1
2
3
I explain this behavior for myself that var
is always the same local variable (and python does not create a new one like in other languages). How can I fix the above code, so that each closure will return another value?