Variable leaking in list comprehensions and for loops

suggest change

Consider the following list comprehension

i = 0
a = [i for i in range(3)]
print(i) # Outputs 2

This occurs only in Python 2 due to the fact that the list comprehension “leaks” the loop control variable into the surrounding scope (source). This behavior can lead to hard-to-find bugs and it has been fixed in Python 3.

i = 0
a = [i for i in range(3)]
print(i) # Outputs 0

Similarly, for loops have no private scope for their iteration variable

i = 0
for i in range(3):
    pass
print(i) # Outputs 2

This type of behavior occurs both in Python 2 and Python 3.

To avoid issues with leaking variables, use new variables in list comprehensions and for loops as appropriate.

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:



Table Of Contents