Глобальным словарям не нужно ключевое слово global для их изменения? [Дубликат]
Возможный дубликат:
Почему ключевое слово global не требуется в этом случае?
Интересно, почему я могу изменить глобальный словарь безglobal
ключевое слово? Почему это'обязательно для других типов? Есть ли за этим логика?
Например. код:
#!/usr/bin/env python3
stringvar = "mod"
dictvar = {'key1': 1,
'key2': 2}
def foo():
dictvar['key1'] += 1
def bar():
stringvar = "bar"
print(stringvar)
print(dictvar)
foo()
print(dictvar)
print(stringvar)
bar()
print(stringvar)
Дает следующие результаты:
me@pc:~/$ ./globalDict.py
{'key2': 2, 'key1': 1}
{'key2': 2, 'key1': 2} # Dictionary value has been changed
mod
bar
mod
где я бы ожидал:
me@pc:~/$ ./globalDict.py
{'key2': 2, 'key1': 1}
{'key2': 2, 'key1': 1} # I didn't use global, so dictionary remains the same
mod
bar
mod