python整数缓存和字符串驻留机制

引言

学习python时存在一些python存储机制的疑惑,有机会进行梳理便于自己和他人学习,故写下此篇博客

Python万物皆对象

所谓对象就是一种存储方式,变量一般存储在栈中,对象存储在堆中,对象内容包含:id,type,value。python定义变量不声明是因为对象中已经存在type类型,因此不用声明。栈中变量停止使用后即可释放,而堆中对象会通过垃圾回收机制进行空间释放。
在这里插入图片描述

整数缓存机制

工具:pycharm
在python console中整数缓存[-5,256],也就是使用此范围的数据,将从缓存表中直接取得,所有变量通过引用使用数字将使用同一个对象,id相同,如下图1。而超出数据范围的数字将重新创建对象,不同的变量对应的对象将不同,如图2。
在这里插入图片描述

在这里插入图片描述
上述是在python console中,而在代码块中的数字缓存范围为[-∞,+∞],因此所有的方案都是上述第一种形式,这里要特别注意一下。区分两种形式方法使用is,is比较id是否相同,==比较value是否相同。

字符串驻留机制

仅保存一份相同且不可变字符串的方法,不同的值存放在字符串驻留池中。Python支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母和数字)会启用字符串驻留机制。

a = 'abd'
b = 'abd'
a is b # True
a = 'a#'
b = 'a#'
a is b # False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting_1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值