closure — 個人保險箱
每個撲滿都是獨立的記憶體
每次呼叫 製造計數器(),Python 都會建立一個全新的 Cell 物件保險箱。弟弟和妹妹的錢互不干擾。
🐷
弟弟的撲滿
獨立 Cell 物件 #1
0
🐷
妹妹的撲滿
獨立 Cell 物件 #2
0
# 閉包 — 每次呼叫產生獨立實例
def 製造計數器():
計數 = 0
def 投幣(金額):
nonlocal 計數
計數 += 金額
return 計數
return 投幣
弟弟的撲滿 = 製造計數器()
妹妹的撲滿 = 製造計數器()
關鍵:即使外層的 製造計數器() 已執行完畢,計數 依然活著——它被 Python 鎖進了保險箱(Cell 物件),綁在 投幣 函式身上帶走了。外部程式碼完全無法直接存取這個值。