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

一、同一文件(模块)里,变量存储的缓存机制

# 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)字符串的长度为01,默认驻留在小数据池
(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)
	可以指定任意字符串加入到小数据池中,无论声明多少变量,只要此值相同,都指向同一个地址空间
	

三、缓存机制的意义

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值