Python 2.7では、次のコードを実行します。
def f():
a = a + 1
f()
次の結果が得られます。
Traceback (most recent call last):
File "test.py", line 4, in <module>
f()
File "test.py", line 2, in f
a = a + 1
UnboundLocalError: local variable 'a' referenced before assignment
しかし、コードを以下に変更すると、次のようになります。
def f():
a[0] = a[0] + 1
f()
別のエラーが発生します:
Traceback (most recent call last):
File "test.py", line 4, in <module>
f()
File "test.py", line 2, in f
a[0] = a[0] + 1
NameError: global name 'a' is not defined
Pythona
がローカル変数であると見なしているのにint
、グローバルであると見なしているのはなぜlist
ですか?この背後にある理論的根拠は何ですか?
PS:私はこのスレッドを読んだ後に実験していました。