下面是小凰凰的简介,看下吧!
💗人生态度:珍惜时间,渴望学习,热爱音乐,把握命运,享受生活
💗学习技能:网络 -> 云计算运维 -> 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: