我们要在数学上判断两个对象是否相等,可以使用=号。在python中,由于要比较的数据不一定是数值,所以我们的符号有is和==可供选择。所以在不同的条件下,选择is还是==是不一样的。下面我们来寻找一下is和==在恒等运算符中判断对象引用的区别,以帮助大家在使用恒等运算符时做出更好的选择。详细情况如下:
恒等运算符是用来判断两个变量是否指向同一个内存地址的运算符。
两个变量的值相等,不一定指的是同一个内存地址,但是如果两个变量指的是同一个内存地址,那么它们的值一定是相等的。
身份运算符说白了其实就是
is符号。它可以用来比较两个变量是否引用了同一个对象。
>>> a = 3
>>> id(a)
140602638349720
>>> hex(id(a)) # 还原成我们看着更顺眼的16进制,但是本文以10进制地址为主(因为懒)
'0x7fe09a503598'
顾名思义,
is是“相同”,而==是指两者之间的”相等“关系。所谓相同,比较的是两者之间的在内存中的位置,
>>> a = 3
>>> id(a)
140602638349720
>>> b = 3 # b指向的是和a指向的同一块地址(但是并不意味这改变了a,b也会相应改变)
>>> id(b)
140602638349720
>>> c = a # a的引用复制给c,在内存中其实是指向了用一个对象
>>> id(c)
140602638349720
>>> a is b
True
>>> a is c
True
>>> b is c
True
我们看到,上面
a,b,c的地址相同,所以他们互相之间”相同“
而相等则两者之间的数值对应相等
>>> a = 3
>>> b = a
>>> a = 4
>>> b
3
>>> a = [3]
>>> b = [3]
>>> id(a)
4351374184
>>> id(b)
4351374112
>>> a is b
False
>>> a == b
True
>>> a[0] = 4
>>> b
[3]
>>> a = [3]
>>> b = a # b就是a的引用,占得是同一块地址,而且当a的内容改变时,b也会随之改变,这和上面
# int对象不同,我也不知道为啥要这么搞。
>>> a[0] = 4
>>> b
[4]
很多人看到这一定是乱七八糟的,其实这是一个原则,如果能用==就不用is了。除了一种情况,就是判断对象是否为None。
>>> if a is None:
... pass
以上就是我们在探索python运算符时,在不同情况下选择is还是==。相信大家已经了解了两者的区别和用法。小编还是建议多用一点==。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python中的会话是什么09/26
- ♥ 如何查看python的库09/05
- ♥ mysql是开源的吗?09/25
- ♥ python字符串索引的使用09/27
- ♥ python的常用模块有哪些12/26
- ♥ python多行制表符怎么做11/07
内容反馈