Python python中可變物件和不可變物件

2021-10-10 12:44:08 字數 1687 閱讀 4207

一、定義:

可變物件:當有需要改變物件內部的值的時候,這個物件的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 引數未使用,值始終未...