python 基础之变量存储缓存机制与数据驻留小数据池

一:变量存储的缓存机制

在同一文件(模块)里,变量存储的缓存机制 (仅对python3.x版本负责),那么python

--对于Number (int bool float complex)python3.x

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)) #不相同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)

#能够指定任意字符串加入到小数据池中,不管声明多少个变量,只要此值相同,都指向同一个地址空间

 

 

*不管是缓存机制仍是小数据池的驻留机制,都是为了节省内存空间,提高代码效率

相关文章
相关标签/搜索