2012-12-29 41 views

回答

11

因爲您不是指定爲cache,您改爲改變字典本身。 cache仍然指向字典,因此本身不變。該行cache['foo'] = 'bar'轉換爲cache.__setitem__('foo', 'bar')。換句話說,cache的值是一個python dict,並且該值本身是可變的。

如果你想改變什麼cache是指通過使用cache = 'bar'相反,你會改變什麼cache點,然後你需要的global關鍵字。

也許這對我的一個類似的問題,我的老答案可以幫助你瞭解區別:Python list doesn't reflect variable change

+1

那麼這種方式可以藐視「global」關鍵字的全部意義? –

+1

@BunnyRabbit:具有'global'關鍵字的*點*是python編譯器知道要更改的結構。充分理解爲什麼需要這樣做需要深入研究Python的內部工作('locals()'與'globals()'和字節碼等)。這裏沒有任何東西被動搖,動態語言不是試圖阻止你修改全局變量。 :-) –

相關問題