グローバル変数を誤って変更するのを避けるために、Pythonはグローバル変数に代入する前に明示的にglobal
ステートメントを必要とします。しかし、そのメソッドを呼び出すことによってグローバル変数を変更することは、特別なステートメントなしで行うことができます:グローバル変数:代入とメソッド呼び出し
x = [1, 2]
y = [1, 2]
def f():
global x
x = x + [3] # won't affect global variable without global statement
y.append(3) # will affect global variable without global statement
これはやや矛盾したようです。メソッドの呼び出しによってグローバルな変更可能なオブジェクトを変更するのは、新しいオブジェクト全体で置き換えるのと比べて、危険性は低いと評価されています。もしそうなら、なぜですか? documentationから
。 http://stackoverflow.com/questions/6329499/in-python-why-is-list-automatically-global – MooingRawr