prog1.py:
def runf(f):
    f()
def main():
    l = [0]
    def f():
        l.append(1)
    runf(f)
    print(l)
main()
Gives me (as expected):
[0, 1]
prog2.py:
def runf(f):
    f()
def main():
    l = [0]
    def f():
        l += [1] # <-- Only difference
    runf(f)
    print(l)
main()
Gives me:
Traceback (most recent call last):
  File "prog2.py", line 11, in <module>
    main()
  File "prog2.py", line 8, in main
    runf(f)
  File "prog2.py", line 2, in runf
    f()
  File "prog2.py", line 7, in f
    l += [1]
UnboundLocalError: local variable 'l' referenced before assignment
Could someone please explain to me what's going on here?
Note: This happens in both python2 and python3.
Also, I'm open to suggestions on a better title for this question.
 
    