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