for x in ... inherently assigns values to x, because x is the loop variable in a for loop.
Each iteration of the loop assigns a value into x; Python doesn't create a new variable scope for loops.
for x in (1, 2, 3):
foo(x)
is the equivalent of...
x = 1
foo(x)
x = 2
foo(x)
x = 3
foo(x)