python小特性:is和==、变量的内存管理、小整数对象池、intern机制

下面是小凰凰的简介,看下吧!
💗人生态度:珍惜时间,渴望学习,热爱音乐,把握命运,享受生活
💗学习技能:网络 -> 云计算运维 -> python全栈( 当前正在学习中)
💗您的点赞、收藏、关注是对博主创作的最大鼓励,在此谢过!
有相关技能问题可以写在下方评论区,我们一起学习,一起进步。
后期会不断更新python全栈学习笔记,秉着质量博文为原则,写好每一篇博文。

一、is和"=="

  • is比较的是内存地址的大小是否相等
  • ==表示的是值(或者说内容是否相等)
  • id()函数,可以获取内存地址

不论什么数据类型这两个都是这样子的。

二、变量内存管理

变量名其实存储的是一个变量值所在的逻辑地址

a = 'info: egon: 18'
b = 'info: egon: 18'
print(a is b)

在这里插入图片描述
像上面这样子分别设置的变量,并不是指向同一个内存地址,无论变量值是否相等,都会开辟新的地址空间存储。

a = 'info: egon: 18'
b = a
print(a is b)

在这里插入图片描述这个相当于赋值的是内存地址,所以并没有开辟新的地址空间

三、小整数对象池、intern机制

注意python中创建两个内容一样的变量时(变量名不一样),一般都会在内存中分配两个不一样的内存地址分别给这两个变量。即两个变量的内容虽然一样,但是变量的引用地址不一样。所以两个变量使用==成立,但是使用is比较不成立。
但是在python中有两个意外情况:
1、使用python命令行时对于小整数[-5,256]区间内的整数,python会创建小整数对象池,这些对象一旦创建,就不会回收,所有新创建的在这个范围的整数都是直接引用他即可。所以造成在[-5,256]区间内的整数不同变量只要值相同,引用地址也相同。此范围外的整数同样遵循新建一个变量赋予一个地址。例如:
在这里插入图片描述

在这里插入图片描述
2、python中虽然字符串对象也是不可变对象,但python有个intern机制,简单来说就是维护一个字典,这个字典维护已经创建字符串(key)和它的字符串对象的地址(value),每次创建字符串对象都会和这个字典比较,没有就创建,重复了就用指针引用即可。相当于python对于字符串也是采用了对象池的原理(区别是intern机制中的字典是程序运行中创建并不断添加的,而小整数对象池是运行程序之前就创建好了的)。(特别注意:如果字符串(含有空格),不可修改,没开启intern机制,不共用对象。比如"a b"和"a b",这种情况is是不成立的) 例如:

在这里插入图片描述

注意:无论是什么情况,在pycharm中只要创建变量的值相等那么它们的地址一定相等,因为pycharm做了优化。上述结论只在python自带命令行中有效。当然我们也以python命令行中的语法为标准。

四、python自带命令行和pycharm

python自带命令行工具:
在这里插入图片描述pycharm:
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凤求凰的博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值