(This is more of a long comment than an answer - there are a couple of good ones already, especially @TrebledJ's. But I had to think of it explicitly in terms of overwriting variables that already have values before it clicked for me.)
If you had
x = 0
l = [1, 2, 3]
for x in l:
    print(x)
you wouldn't be surprised that x is overridden each time through the loop. Even though x existed before, its value isn't used (i.e. for 0 in l:, which would throw an error). Rather, we assign the values from l to x.
When we do
a = [0, 1, 2, 3]
for a[-1] in a:
  print(a[-1])
even though a[-1] already exists and has a value, we don't put that value in but rather assign to a[-1] each time through the loop.