PythonのSub関数での変数のスコープ

# -*- coding:sjis -*-
def main():
    x = 1
    def sub1():
        print x     # 1 : main()localのx
    def sub2():
        x = 2
        print x     # 2 : sub2()localのx
    def sub3():
        print x     # UnboundLocalError: local variable 'x' referenced before assignment
                    # sub3()localのxが定義前に使用された!
        x = 3
    sub1()
    sub2()
    #sub3()
    print x         # 1

Sub関数では、Main関数の変数は、参照はできるけど書き換えはできないのか?
http://www.python.jp/doc/2.4/ref/naming.html

ある名前がコードブロック内で使われると、その名前を最も近傍から囲うようなスコープ (最内スコープ: nearest enclosing scope) を使って束縛の解決を行います。こうしたスコープからなる、あるコードブロック内で参照できるスコープ全ての集合は、ブロックの 環境 (environment) と呼ばれます。
...