在同一文件(模塊)裏,變量存儲的緩存機制 (僅對python3.x版本負責),那麼python
--對於Number (int bool float complex)python3.x
(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)) #相同
對於容器類型部分 緩存
(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)) #不相同spa
不一樣文件(模塊)裏,部分數據駐留小數據池中 (僅對python3.x版本負責)blog
python提早在內存中建立了-5 ~ 256 範圍的整數,駐留在了內存的一塊區域.內存
若是是不一樣文件(模塊)的兩個變量,並在此範圍具備了相同的值,字符串
那麼id一致.string
小數據池只針對:int ,string,bool,以及空元祖(),None關鍵字 有效class
對於字符串來講:效率
(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)
#能夠指定任意字符串加入到小數據池中,不管聲明多少個變量,只要此值相同,都指向同一個地址空間
*不管是緩存機制仍是小數據池的駐留機制,都是爲了節省內存空間,提高代碼效率