以下の動作に非常に混乱しています。ケース 1、3、および 4 は期待どおりに動作しますが、ケース 2 はそうではありません。ケース 2 では、辞書が関数によって返されないにもかかわらず、関数が辞書エントリの値をグローバルに変更できるのはなぜですか? 私が関数を使用している主な理由は、関数内のすべてを残りのコードから分離することですが、関数内で同じ変数名を使用することを選択した場合、これは可能ではないようです。関数で明示的に定義されたものはすべてその関数にローカルであると理解していましたが、辞書が定義され、関数への入力として渡された場合、これは当てはまらないようです。
Python 2.7.2+ (default, Oct 4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
=============ケース1===============
>>> def testfun1(a):
... a=2
...
>>> a=0
>>> testfun1(a)
>>> a
0
=============ケース2===============
>>> def testfun2(b):
... b['test']=2
...
>>> b={}
>>> testfun2(b)
>>> b
{'test': 2}
=============ケース3===============
>>> def testfun3():
... c=2
...
>>> c=0
>>> testfun3()
>>> c
0
=============ケース 4=============== (この質問で説明:グローバル辞書はそれらを変更するためにグローバルなキーワードを必要としませんか? )
>>> def testfun4():
... d['test']=10
...
>>> d={}
>>> testfun4()
>>> d
{'test': 10}