is和==的区别

在python中万物即对象,所以is比较的是id值相同不相同,而==仅比较值
对于值大小在-5~256之间的变量,python因为有内存池缓存机制,会对该值分配内存,而不是变量,所以只要是该值的变量都指向同一个内存,即id相同。例如:

>>> a = 257
>>> b = 257
>>> a is b
False
>>> c = 5
>>> d = 5
>>> c is d
True

>>> id(a)
2047860189776
>>> id(b)
2047860189936
>>> id(c)
1884139872
>>> id(d)
1884139872

但是,==仅比较值大小,例如:

>>> a = 257
>>> b = 257
>>> a == b
True

以上为交互模式的结果,脚本模式下is和==结果一样!
其区别在于:交互模式下,每一行代码作为一个独立的代码块,超出缓存机制部分,会新建对象。脚本模式下,脚本文件整个作为一个代码块,在新建常量的过程,会优先检查常量字典,所以在脚本模式下,结果一样。
更为详细的验证请参考:
https://www.zhihu.com/question/53536750

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值