1. 程式人生 > >python 基礎之變量存儲緩存機制與數據駐留小數據池

python 基礎之變量存儲緩存機制與數據駐留小數據池

集合 分享圖片 font img 以及 默認 效率 com pytho

一:變量存儲的緩存機制

在同一文件(模塊)裏,變量存儲的緩存機制 (僅對python3.x版本負責),那麽

--對於Number (int bool float complex)

1.對於整型而言,-5~正無窮範圍內的相同值 id一致

2.對於浮點數而言,非負數範圍內的相同值 id一致

3.布爾值而言,值相同情況下,id一致

4.復數的id標識都不相同(在 實數+虛數 這樣的結構中)


(1) int -5 ~ 正無窮範圍內
var1 = 18
var2 = 18
print(id(var1),id(var2)) #相同
var1 = -99
var2 = -99
print(id(var1),id(var2)) #不相同

var1 = -6
var2 = -6
print(id(var1),id(var2)) #不相同

2)float 非負數
var1 = 3.15
var2 = 3.15
print(id(var1),id(var2)) #相同
var1 = -6.88
var2 = -6.88
print(id(var1),id(var2)) #不相同

(3) bool 在布爾值相同的情況下 值得地址相同
var1 = False
var2 = False
print(id(var1),id(var2)) #相同

(4) 在實數 + 虛數的情況下 永遠不一樣
var1 = 5+3j
var2 = 5+3j
print(id(var1),id(var2)) #不相同
‘‘‘只有虛數的情況下,例外‘‘‘
var1 = 8j
var2 = 8j
print(id(var1),id(var2)) #相同


--對於容器類型部分
5.字符串而言,字符串值相同情況下,id一致
6.列表,元組,字典,集合無論什麽情況,id標識都不同(但空元組的id標識一樣)


(1)str
var1 = "你"
var2 = "你"
print(id(var1),id(var2)) #相同

(2)空元組
var1 = ()
var2 = ()
print(id(var1),id(var2)) #相同

(3)剩下所有的容器類型數據地址都不一樣
var1 = (1,2,3)
var2 = (1,2,3)
print(id(var1),id(var2)) #不相同

var1 = []
var2 = []
print(id(var1),id(var2)) #不相同

var1 = {‘a‘:1}
var2 = {‘a‘:1}
print(id(var1),id(var2)) #不相同

二:數據駐留小數據池

不同文件(模塊)裏,部分數據駐留小數據池中 (僅對python3.x版本負責)

python提前在內存中創建了-5 ~ 256 範圍的整數,駐留在了內存的一塊區域.

如果是不同文件(模塊)的兩個變量,並在此範圍具有了相同的值,

那麽id一致.

小數據池只針對:int ,string,bool,以及空元祖(),None關鍵字 有效

對於字符串來說:

(1)字符串的長度為0或者1,默認駐留小數據池

技術分享圖片

(2)字符串的長度>1,且只含有大小寫字母,數字,下劃線時,默認駐留小數據池

技術分享圖片

(3)用乘法得到的字符串,分兩種情況。

1)乘數為1時:

無論什麽字符串 * 1 , 都默認駐留小數據池

2)乘數大於1時:

乘數大於1,僅包含數字,字母,下劃線時會被緩存,但字符串長度不能大於20

技術分享圖片

指定駐留

from sys import intern

a = intern(‘盲僧&*^^1234‘*10)

b = intern(‘盲僧&*^^1234‘*10)

print(a is b)

#可以指定任意字符串加入到小數據池中,無論聲明多少個變量,只要此值相同,都指向同一個地址空間

技術分享圖片

*無論是緩存機制還是小數據池的駐留機制,都是為了節省內存空間,提升代碼效率

技術分享圖片

python 基礎之變量存儲緩存機制與數據駐留小數據池