python变量存储机制_python 基础之变量存储缓存机制与数据驻留小数据池

一:变量存储的缓存机制

在同一文件(模块)里,变量存储的缓存机制 (仅对python3.x版本负责),那么

--对于Number (int bool float complex)

1.对于整型而言,-5~正无穷范围内的相同值 id一致

2.对于浮点数而言,非负数范围内的相同值 id一致

3.布尔值而言,值相同情况下,id一致

4.复数的id标识都不相同(在 实数+虚数 这样的结构中)

(1) int -5 ~ 正无穷范围内

var1 = 18

var2 = 18

print(id(var1),id(var2)) #相同

var1 = -99

var2 = -99

print(id(var1),id(var2)) #不相同

var1 = -6

var2 = -6

print(id(var1),id(var2)) #不相同

(2)float 非负数

var1 = 3.15

var2 = 3.15

print(id(var1),id(var2)) #相同

var1 = -6.88

var2 = -6.88

print(id(var1),id(var2)) #不相同

(3) bool 在布尔值相同的情况下 值得地址相同

var1 = False

var2 = False

print(id(var1),id(var2)) #相同

(4) 在实数 + 虚数的情况下 永远不一样

var1 = 5+3j

var2 = 5+3j

print(id(var1),id(var2)) #不相同

'''只有虚数的情况下,例外'''

var1 = 8j

var2 = 8j

print(id(var1),id(var2)) #相同

对于容器类型部分

5.字符串而言,字符串值相同情况下,id一致

6.列表,元组,字典,集合无论什么情况,id标识都不同(但空元组的id标识一样)

(1)str

var1 = "你"

var2 = "你"

print(id(var1),id(var2)) #相同

(2)空元组

var1 = ()

var2 = ()

print(id(var1),id(var2)) #相同

(3)剩下所有的容器类型数据地址都不一样

var1 = (1,2,3)

var2 = (1,2,3)

print(id(var1),id(var2)) #不相同

var1 = []

var2 = []

print(id(var1),id(var2)) #不相同

var1 = {'a':1}

var2 = {'a':1}

print(id(var1),id(var2)) #不相同

二:数据驻留小数据池

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

python提前在内存中创建了-5 ~ 256 范围的整数,驻留在了内存的一块区域.

如果是不同文件(模块)的两个变量,并在此范围具有了相同的值,

那么id一致.

小数据池只针对:int ,string,bool,以及空元祖(),None关键字   有效

对于字符串来说:

(1)字符串的长度为0或者1,默认驻留小数据池

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

(3)用乘法得到的字符串,分两种情况。

1)乘数为1时:

无论什么字符串 * 1 , 都默认驻留小数据池

2)乘数大于1时:

乘数大于1,仅包含数字,字母,下划线时会被缓存,但字符串长度不能大于20

指定驻留

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、付费专栏及课程。

余额充值