2012-12-29 22 views

cevap

11

değerini atamadığınız için , bunun yerine sözlüğün kendisini değiştiriyorsunuz. cache hala sözlüğe işaret ediyor, dolayısıyla değişmemiş. cache['foo'] = 'bar' hattı, cache.__setitem__('foo', 'bar')'a çevrilir. Diğer bir deyişle, cache'un değeri bir python dict'dur ve bu değerin kendisi mutable olabilir.

Eğer cache yerine cache = 'bar' kullanarak, cache işaret ve sonra global anahtar kelime ne gerek değişen olacağını belirtmektedir neyi değiştirmeyi denediğinizde.

Belki de bu eski soruyu benzer bir soruya verdiğiniz cevap, şu anki farkı anlamanıza yardımcı olur: Python list doesn't reflect variable change. Değiştirilebilir nesneler için

+1

Bu sayede, global 'global' anahtar sözcüğe sahip olmanın bütün noktasına meydan okuyabilirsiniz? –

+1

@BunnyRabbit: 'global' anahtar kelimesine sahip olmanın * noktası *, python derleyicisinin hangi yapının değişeceğini bilmesi içindir. Niçin gerekli olduğunu tam olarak anlamak, Python'un ('locals()') 'globals()' ve byte kodu ve benzeri) iç işleyişlerini incelemeyi gerektirir. Burada hiçbir şeye meydan okunmuyor, dinamik bir dil, sizi globals'ı değiştirmekten alıkoymaya çalışmak değildir. :-) –

İlgili konular