python 基礎之變量存儲緩存機制與數據駐留小數據池
一:變量存儲的緩存機制
在同一文件(模塊)裏,變量存儲的緩存機制 (僅對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)) #不相同
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 基礎之變量存儲緩存機制與數據駐留小數據池