一、同一文件(模块)里,变量存储的缓存机制
# Number
# 1.int: [-5, +∞]范围内的相同值id一致
intvar1 = 100 # 两个变量指向了同一个值
intvar2 = 100
intvar3 = -100
intvar4 = -100
print(id(intvar1), id(intvar2))
print(id(intvar3), id(intvar4))
# 2.float: 非负数范围内的相同值id一致
# 3.bool: 值相同的情况下id一致
# 4.complex: 实数+虚数这样的结构下永不相同,只有虚数的情况例外
intvar1 = 3+4j
intvar2 = 3+4j
print(id(intvar1), id(intvar2)) #每次执行都不一样
intvar3 = 4j
intvar4 = 4j
print(id(intvar3), id(intvar4))
# 容器类型
# 5.str 和空元组tuple 相同情况下,地址相同
# 6.list、tuple、dict、set无论在什么情况下,id都不同
二、不同文件(模块)里,部分数据驻留小数据池中
# 小数据池只针对:int, str, bool, 空元组(), None关键字 等数据类型有效
1.对于int而言:
python在内存中创建了-5 ~ 256范围的整数,提前驻留在了内存的一块区域,如果是不同文件(模块)的两个变量,声明同一个值,在这个范围里,两个变量的值都同时指向一个值的地址,节省空间。
2.对于str而言:
(1)字符串的长度为0或1,默认驻留在小数据池
(2)字符串的长度>1,且只含大小写字母、数字、下划线时,默认驻留小数据池
(3)用*号得到的字符串,分两种情况:
①乘数=1时,无论什么字符串*1,都默认驻留小数据池
②乘数>1时,仅包含数字、字母、下划线时会被缓存,但字符串长度≤20
3.指定驻留
(1)从sys模块 引入intern函数,让a,b两个变量执行同一个值
from sys import intern
a = intern('大帅锅&*^^1234'*10)
b = intern('大帅锅&*^^1234'*10)
print(a is b)
可以指定任意字符串加入到小数据池中,无论声明多少变量,只要此值相同,都指向同一个地址空间
三、缓存机制的意义
无论是变量缓存机制还是小数据池的驻留机制,都是为了节省内存空间,提升代码效率