l is passed as an argument to range function whose value is modified inside for loop, but the loop is going for 10 times
l
range
for
10
The issue is not how often range evaluates its argument, but how often for item in sequence evaluates sequence. The answer is once. When you write for i in range(l), range(l) is evaluated once and that's it.
for item in sequence
sequence
for i in range(l)
range(l)