2012-12-29 26 views

Trả lời

11

Vì bạn không phải là chỉ định đến cache, thay vào đó bạn đang thay đổi từ điển. cache vẫn trỏ đến từ điển, do đó bản thân nó không thay đổi. Dòng cache['foo'] = 'bar' chuyển thành cache.__setitem__('foo', 'bar'). Nói cách khác, giá trị của cache là một con trăn dict và giá trị đó là chính nó có thể thay đổi.

Nếu bạn cố gắng thay đổi những gì cache đề cập đến bằng cách sử dụng cache = 'bar' thay vào đó, bạn sẽ được thay đổi những gì cache điểm đến và sau đó bạn cần từ khóa global.

Có lẽ câu trả lời cũ hơn của tôi về câu hỏi tương tự sẽ giúp bạn hiểu sự khác biệt: Python list doesn't reflect variable change.

+1

Vì vậy, cách này người ta có thể thách thức toàn bộ quan điểm của việc có từ khóa 'toàn cầu'? –

+1

@BunnyRabbit: Điểm * có từ khóa 'global' là dành cho trình biên dịch python để biết cấu trúc nào cần thay đổi. Hiểu đầy đủ lý do tại sao điều đó là cần thiết đòi hỏi phải delving vào các hoạt động bên trong của Python ('local()' so với 'globals()' và mã byte và như vậy). Không có gì đang bị thách thức ở đây, một ngôn ngữ năng động không phải là cố gắng ngăn cản bạn sửa đổi các hình cầu. :-) –

Các vấn đề liên quan