Python 命名空间的1点疑惑

Python 命名空间的一点疑惑
今天看了Python的命名空间的资料,也了解了一些,但是遇到下面这段代码如何解释?
函数 fun() 打印全局命名空间中的变量 i,OK
函数 fun2() 在其局部命名空间中创建变量 j,然后将全局命名空间中的变量 i 的值赋值给 j,也是OK
函数 fun3()  怎么就报错了,请高人解释一下,我刚接触Python,好多地方有疑惑,先谢谢了!

>>> i = 1
>>> def fun():
...     print(i)
... 
>>> fun()
1
>>> i = 1
>>> def fun2():
...     j = i
...     print(j)
... 
>>> fun2()
1
>>> def fun3():
...     j = i
...     i = j
...     print(i)
... 
>>> fun3()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in fun3
UnboundLocalError: local variable 'i' referenced before assignment

------解决方案--------------------
你在fun3里对 i 有赋值操作,它就认为这个函数作用域里的 i 是新的局部变量,那你在给 i 赋值之前就对其引用当然要报错了,15  16行换换