python篇 “is“和“==“

1.两者区别

1.1.概念

在python中"is"和"=="都可用来判断变量,刚开始学的时候很容易弄晕,一会儿is满足,一会儿不满足,搞不清该怎么用,所以这里做个小结。

is判断两个变量内存地址是否相同
==用来比较两个变量的值是否相等

1.2.演示

首先我们先了解一下如何用全局函数id()查看内存地址

>>> num1 = 10000   #==判断的就是这个
>>> num2 = 20000   #==判断的就是这个
>>> id(num1)
830607078544   #is判断的就是这个
>>> id(num2)
830607077808   #is判断的就是这个

我们可以看见其内存地址和值两者都不一样,所以理所应当的is和==判断都为false

>>> num1 == num2
False
>>> num1 is num2
False

心急的小盆友就要说了,这不就是一个意思吗?别急,我们看下下面这种情况

>>> num1 = 10000
>>> num2 = 10000
>>> num1 is num2
False
>>> num1 == num2
True

没错,内存地址和值并不是一个概念,正常情况下,内存地址和值是分开,这也就is和==必须区分使用的原因。

>>> id(num1)
799191566992
>>> id(num2)
799191567184

接下来还有种情况,应该也是看这篇博客的朋友最关心的情况,为什么,我赋值一样时,它们的内存地址也是一样。

>>> num1 = 1
>>> num2 = 1
>>> id(num1)
799186381104
>>> id(num2)
799186381104
>>> num1 is num2
True
>>> num1 == num2
True

要讲清楚这点,就需要隆重介绍我们的缓存区概念了

2.缓存区概念

我们知道在存储数据时是会耗费内存资源的,而一些经常反复用的数据,如果每次单独给它们分配空间的话,就会显得冗余,耗费内存资源也非常大,进而影响程序执行的效率,解决的方案能就是提前存储好一些常用数据,然后使用指针,把它们重复使用,例如在给一个变量赋值时假如赋给它的值是缓存区的数据,就不单独分配空间了,而是直接把缓存区里已经存好数据的内存地址给它,而存放着这些常用数据的区域就是缓存区了。

2.1数据区

python缓存区中有一个数据区,数据区存的都是常量、固定不变的值、缓存数据等等,python中有一个小整型缓存区(-5~256),当变量的取值在这个小整型缓存区范围内,就不会再内存中开辟新的空间进行存储。

2.2.字符串区

除了小整型缓存区还有字符串缓存区,但是不能包含特殊字符

2.3.演示


>>> a = 10
>>> b = 10
>>> a == b
True
>>> a is b



>>> s = "hello"
>>> ss = "hello"
>>> s is ss
True
>>> s = "*hello"
>>> ss = "*hello"
>>> s == ss
True
>>> s is ss
False
>>>

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值