python面试题01 is与==的区别

前言

本节是专栏的第一篇,我也是开始将自己的一些积累记录下来,因为平时时间很有限,所以不会长篇大论,只会小而精,欢迎大家提出自己面试过程中遇到的面试题,大家一起分享,一起解答,一起进步,如若文章内容说得不对的地方,请帮我及时指正。

is 与 == 的区别

不同点:is 比较的是内存的地址,==比较的是值
相同点:返回值都是布尔值

实验解释

请看下面的例子

>>> a = []
>>> b = []
>>> a is b
False
>>> a == b
True
>>> id(a)
2322879312000
>>> id(b)
2322879314688

从上面的例子我们创建了两个列表a和b, 那么在我们计算机内存中,自然会自动开辟两块不同的内存,他们的内存地址是不一样的,但是他们的值都是一个空列表,所以使用 == 的时候会去到内存块中取得值进行对比,而is会直接对比内存地址
这里已经解释完is和 ==的区别,但是感兴趣的小伙伴可以试试 下面的例子

特殊例子

这里的例子的特殊是因为python的内存管理机制导致的,可以说在python的内存优化机制下,下面的例子is和==的返回值都会是一样的。

>>> a = 1
>>> b = 1
>>> a == b
True
>>> a is b
True
>>> id(a)
2322874001712
>>> id(b)
2322874001712

但是这里是不违反is比较地址的说法,因为他们地址是相同的,这是因为python在内存优化上有小整数池的概念,其他特殊的还有list,tuple等类型的free_list, 字符串的intern机制等等,这部分会在后面继续更新,这里提出只是为了让大家注意下这些特殊例子背后的原因,至少面试举例的时候不要傻傻的和面试官说a=1,b=1,用is是不同的哈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陌~晓

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

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

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

打赏作者

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

抵扣说明:

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

余额充值