What's the difference between doing:
m={}
i='a'
def change():
    m['a'] = i
    i = 'b'
Which raises an attribute error:
>>> change()UnboundLocalError: local variable 'i' referenced before assignment
And:
m={}
i='a'
def change():
    m['a'] = i
Which evaluates without an error.
>>> change() >>> m {'a': 'a'}
(Finally, a question about this question -- when is it appropriate to use the "yellow background" in the questions?)
