Возможный дубликат:
Почему в этом случае не требуется ключевое слово 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)
Дает следующие результаты:
[email protected]:~/$ ./globalDict.py
{'key2': 2, 'key1': 1}
{'key2': 2, 'key1': 2} # Dictionary value has been changed
mod
bar
mod
где я ожидал бы:
[email protected]:~/$ ./globalDict.py
{'key2': 2, 'key1': 1}
{'key2': 2, 'key1': 1} # I didn't use global, so dictionary remains the same
mod
bar
mod