cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
出力
bar
なぜこれが機能し、global
キーワードを使用する必要がないのですか?
cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
出力
bar
なぜこれが機能し、global
キーワードを使用する必要がないのですか?
に割り当てていないためcache
、代わりに辞書自体を変更しています。cache
はまだ辞書を指しているため、それ自体は変更されていません。この行cache['foo'] = 'bar'
は に変換されcache.__setitem__('foo', 'bar')
ます。つまり、 の値cache
は pythondict
であり、その値自体は変更可能です。
代わりにcache
使用して何を参照するかを変更しようとすると、何を指すかを変更することになり、キーワードが必要になります。cache = 'bar'
cache
global
おそらく、同様の質問に対するこの古い回答は、違いを理解するのに役立ちます: Python list does not Reflect variable change。