python中 和is的区别_Python中is和==的区别

在Python中,is和==都是用来对两个对象进行比较判断的,但两者却有本质的区别。

一:is操作符

is操作符是Python语言的一个内置操作符,它的作用是比较两个变量是否指向同一块内存区域,也就是判断id(对象)是否相等。

当两个变量是共享引用关系的话,它们指向的肯定是同一块内存区域,用is判断得到的结果肯定为True。

>>> a = 10

>>> b = a

>>> a is b

True

如果是下面的这种情况呢?

>>> a,b = 10,10

>>> a is b

True

>>> id(a), id(b)

(1794638576, 1794638576)

>>> a,b = "abc","abc"

>>> a is b

True

>>> id(a), id(b)

(2281621304632, 2281621304632)

>>> a = (1,2,3)

>>> b = (1,2,3)

>>> id(a), id(b)

(2281620654120, 2281620654264)

>>> a is b

False

>>> a[0] is b[0]

True

>>> id(a[0]), id(b[0])

(1794638288, 1794638288)

从以上例子可以看到,当对象是数值类型或者字符串时,当两个对象的值相等时,它们用is判断的结果就为True,这是因为它们的id是相等的,而元组类型却不是。在Python中,对于小整数和字符串类型,在创建一个数据对象时,会优先使用缓存中的数据,如果缓存中存在,就会使用同一个数据,对于大整数、浮点数、元组、列表、字典、集合这些数据类型,会重新创建一块内存用于存储数据对象,但它们的元素如果是小整数或字符串时,也会优先使用缓存数据,这也就能解释了上面的为什么a[0]和b[0]的id是一样的。

在Python3.5.2下测试,我们发现,-5-256这些小数字Python会使用缓存进行存储。

b778e48830b985c03c518be8f167c6f4.png

二、==操作符

==操作符用来判断两个对象的数据是否相等,而不用关注它们的id是否一致,例如:

>>> a = 10

>>> b = 10.0

>>> a == b

True

>>> id(a), id(b)

(1794638576, 2281597561472)

当两个类的实例进行比较时,如果实例的数据一致时也不一定相等,如下:

class TestEqual():

def __init__(self, u, v):

self.u = u

self.v = v

a = TestEqual(3, 4)

b = TestEqual(3, 4)

print(a == b) # 输出结果为False

为了让类的实例可以进行==比较,需要重新实现eq函数。

class TestEqual():

def __init__(self, u, v):

self.u = u

self.v = v

def __eq__(self, other):

if self.u== other.u:

return True

else:

return False

a = TestEqual(3, 4)

b = TestEqual(3, 5)

print(a == b) # 输出结果为True

从上面这个示例可以看出,在eq函数内部定义的逻辑是只要u相等了,两个类的实例就可以判定为相等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值