Глобальным словарям не нужно ключевое слово 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

Ответы на вопрос(2)

Ваш ответ на вопрос