словарь Python, переданный в качестве входных данных для функции, действует как глобальный в этой функции, а не как локальный
Я очень смущен поведением ниже. Случаи 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 =============== (объясняется с помощью этого вопроса:Глобальным словарям не нужно ключевое слово global для их изменения?)
>>> def testfun4():
... d['test']=10
...
>>> d={}
>>> testfun4()
>>> d
{'test': 10}