Globalne słowniki nie potrzebują globalnego słowa kluczowego, aby je zmodyfikować? [duplikować]

Możliwy duplikat:
Dlaczego słowo kluczowe global nie jest wymagane w tym przypadku?

Zastanawiam się, dlaczego mogę zmienić słownik globalny bezglobal słowo kluczowe? Dlaczego jest to obowiązkowe dla innych typów? Czy kryje się za tym jakaś logika?

Na przykład. kod:

#!/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)

Daje następujące wyniki:

me@pc:~/$ ./globalDict.py 
{'key2': 2, 'key1': 1}
{'key2': 2, 'key1': 2}  # Dictionary value has been changed
mod
bar
mod

gdzie mógłbym się spodziewać:

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

questionAnswers(2)

yourAnswerToTheQuestion