這一部分首先要理解python內存機制,Python中萬物皆對象。
對於不可變對象,改變了原來的值,其別名(變量名)綁定到了新值上面,id肯定會改變



對於可變對象,+ 操作改變了值,id肯定會變,而+= 是本地操作,其值原地修改
對於+號操作,可變對象和不可變對象調用的都是__add__操作
對於+=號操作,可變對象調用__add__,不可變對象調用的是__iadd__(不可變對象沒有__iadd__) __iadd__是原地修改



錯誤:

注意:一個函數內部的任何類型的賦值都會把一個名稱划分為本地的。這包括=語句,import中的模塊名稱、def中的函數名稱、函數參數名稱等。如果在def中以任意方式賦值一個名稱,它都將對於該函數稱為本地的。
特別注意:原處改變的對象並不會把變量划分文本地變量,實際上,只是對變量名賦值才可以。例如變量名L在模塊的頂層被賦值為一個列表,在函數內部的像L.append(x)這樣的語句並不會將L划分為本地變量,而L=Y卻可以。修改一個對象並不是對一個名稱賦值。
變量名解析:LEGB原則:
在函數中使用未認證的變量名時,python搜索4個作用域:本地作用域(L),之后是上一層結構中的def或者lambda本地作用域(E),之后是全局作用域(G),最后是內置作用域(B)
