python-day02_04 变量的缓存机制

# ### 在同一文件中,变量的缓存机制 (仅仅针对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 缓存机制的意义

    无论是变量缓存机制还是小数据池的驻留机制,都是为了节省内存空间,提升代码效率
posted @ 2023-06-15 18:01  cuimeng  阅读(27)  评论(0)    收藏  举报