I didn't know the answer to this, but it seems like this actually behaves closer to `funcs.append("""print(i)""")` since
funcs = list()
for i in range(10):
funcs.append(lambda: print(i))
del i
for f in funcs:
f()
actually NameErrors during f() so I don't think it is actually closing over the i as much as the i was left in scope and the code was seemingly lazy evaluated