# ### 在同一文件中,变量的缓存机制 (仅仅针对python3.6版本负责、在3.7以上版本,值相同,整形、浮点、bool、复数、字符串、列表,元组,字典,集合地址都相同)
# 1.对于整型而言,-5~正无穷范围内的相同值 id一致
var1 = 5
var2 = 5 #var1 地址 = var2 地址
var1 = -100
var2 = -100 #var1 地址 ≠ var2 地址
print(id(var1) , id(var2) )
![]()
# 2.对于浮点数而言,非负数范围内的相同值 id一致
var1 = 4.67
var2 = 4.67
var1 = -4.67
var2 = -4.67
print(id(var1) , id(var2) )
# 3.布尔值而言,值相同情况下,id一致
var1 = True
var2 = True
print(id(var1) , id(var2) )
# 4.复数在 实数+虚数 这样的结构中永不相同
var1 = 4 +5j
var2 = 4 +5j # var1 地址 ≠ var2 地址
# 只有正虚数的情况下例外
var1 = 5j
var2 = 5j #var1 地址 ≠ var2 地址
var1 = -5j
var2 = -5j #var1 地址 ≠ var2 地址
print(id(var1) ,id(var2))
# -->容器类型部分
# 5.字符串 和 空元组 相同的情况下,地址相同
var1 = "你"
var2 = "你"
var1 = ()
var2 = ()
print(id(var1) ,id(var2))
# 6.列表,元组,字典,集合无论什么情况 id标识都不同 [空元组例外]
var1 = (1,2)
var2 = (1,2)
var1 = [1,2,3]
var2 = [1,2,3]
print(id(var1) ,id(var2))
#### 2.6.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)
#可以指定任意字符串加入到小数据池中,无论声明多少个变量,只要此值相同,都指向同一个地址空间
```
#### 2.6.3 缓存机制的意义
无论是变量缓存机制还是小数据池的驻留机制,都是为了节省内存空间,提升代码效率
![]()