Python3的缓存机制

数据的在内存中的缓存机制

 

1、在同一文件(模块)里,变量存储的缓存机制 (仅对python3.6版本负责),3.7以后的缓存机制会有变化

 

 

# ### 同一文件中,数据的缓存机制 [python3.6]
# -->Number 部分
# 1.对于整型而言,-5~正无穷范围内的相同值 id一致
var1 = 100
var2 = 100
print(id(var1) , id(var2))
输出:496856384 496856384
var1 = -100 var2 = -100 print(id(var1) ,id(var2)) 输出:31312816 31312848 # 2.对于浮点数而言,非负数范围内的相同值 id一致 var1 = 5.78 var2 = 5.78 print(id(var1) , id(var2)) var1 = -6.89 var2 = -6.89 print(id(var1) , id(var2)) # 3.布尔值而言,值相同情况下,id一致 (True False) var1 = True var2 = True print(id(var1),id(var2)) # 4.复数在 实数+虚数 这样的结构中永不相同(只有虚数的情况例外) var1 = 5-2j var2 = 5-2j print(id(var1) , id(var2)) var1 = 9j var2 = 9j print(id(var1) , id(var2)) var1 = -9j var2 = -9j print(id(var1),id(var2)) # -->容器类型部分 # 5.字符串 和 空元组 相同的情况下,地址相同 var1 = "我" var2 = "我" print(id(var1) , id(var2)) var1 = () var2 = () print(id(var1),id(var2)) # 6.列表,元组,字典,集合无论什么情况 id标识都不同 [空元组例外] var1 = [1,2,3] var2 = [1,2,3] print(id(var1) , id(var2))
输出:37564552 37564616
var1 = (1,2,3) var2 = (1,2,3) print(id(var1),id(var2))

 

2、不同文件(模块)里,部分数据驻留小数据池中 (仅对python3.6版本负责 了解)

 

  小数据池只针对:int,str,bool,空元祖(),None关键字 这些数据类型有效
 (1)对于int而言python在内存中创建了-5 ~ 256 范围的整数,提前驻留在了内存的一块区域,如果是不同文件(模块)的两个变量,声明同一个值,在-5~256这个范围里,
那么id一致.让两个变量的值都同时指向一个值的地址,节省空间。
 (2)对于str来说:
  1.字符串的长度为0或者1,默认驻留小数据池
  

 

  2.字符串的长度>1,且只含有大小写字母,数字,下划线时,默认驻留小数据池
  

 

   3.用*号得到的字符串,分两种情况。

 

    1)乘数等于1时: 无论什么字符串 * 1 , 都默认驻留小数据池
    2)乘数大于1时: 乘数大于1,仅包含数字,字母,下划线时会被缓存,但字符串长度不能大于20
  

 

(3)指定驻留

 

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

 

# 从 sys模块 引入 intern 函数 让a,b两个变量指向同一个值
from sys import intern
a = intern('大帅锅&*^^1234'*10)
b = intern('大帅锅&*^^1234'*10)
print(a is b)
print(id(a),id(b))
输出:
True
6105752 6105752

 

 3、 缓存机制的意义


无论是变量缓存机制还是小数据池的驻留机制,都是为了节省内存空间,提升代码效率

posted @ 2020-02-25 23:35  思江  阅读(1281)  评论(0编辑  收藏  举报