一、定義:
可變物件:當有需要改變物件內部的值的時候,這個物件的id不發生變化。
不可變物件:當有需要改變物件內部的值的時候,這個物件的id會發生變化。
二、可變物件
以列表為例子如下圖所示, 對 a_list 的修改就不會改變a_list的id:
二、不可變物件
不可變物件包含 整型(int), 字串(string), 浮點型(float), 元組(tuple)
五個場景看清不可變物件在python中的端倪:
場景1: int值比較小時,值一樣的變數id就一樣,值變化id就變化。
場景2: int 值比較大時,值一樣的變數id也不一樣,值變化id就變化。
場景3: float 值一樣的變數id也不一樣,值變化id就變化
場景4: tuple 值一樣的變數id也不一樣
場景5: 單詞型別的 str 型別的值一樣的變數id都相同,值變化的id就變化
非單詞型別的 str 型別的值一樣,id不同
由這些現象說四個內部實現:
int 型別解析
較小的整數會很頻繁的被使用,所以python將這些物件放置到了乙個池子中,每次需要這些物件的時候就到池子中獲取這個值,避免多次的重複建立物件引起的許多不必要的開銷。這個池子內的數字範圍是[-5, 257), 所以都是從池子裡面取值,自然id不變。
float型別解析
對於float型別的使用自然沒有int那麼頻繁,並且float型別也不好定義哪些常用,也就沒有池子給到這個型別,所以每次重新建立即可。
tuple型別解析
對於tuple型別,與float型別的思維相似,所以也是每次重新建立。
string型別解析
單詞型別的str由於被重複使用的概率比較大,所以在python中為單詞型別的str做了乙個快取,也就是說如果是單詞型別的str, 會被儲存到乙個字典(dict)中,字典的內容是字串為key, 位址為value。當有乙個字串需要建立,就先去訪問這個字典,如果存在則返回字典中字串的位址,如果不存在,則返回新建立的位址,並將這個字串新增進入字典。這是字串的intern機制。
參考:
python python中的遍歷
遍歷list集合 infp 1,2,3,3,3 for m in infp print m 值得注意的是,m在此處的值是infp中的想對應的值,當我們通過del infp m 或者 infp.remove m 如下 infp 1,2,3,3,3 for m in infp if m is 3 pri...
python python中的urllib模組
import urllib.request response urllib.request.urlopen html response.read decode utf 8 print html 指定請求頭的方式 import urllib.request url headers request ur...
Python Python中的程序
python提供了多個模組用於建立程序。比如os.fork 適用於linux unix mac 和multiprocessing模組和pool程序池。multiprocessing模組提供了乙個process類來代表乙個程序物件,語法如下 使用的為可選引數 引數說明 group 引數未使用,值始終未...