Python 学习笔记(九):is 和 == 的区别

is 和 == 都是对 python 对象进行比较的操作符,python 对象包含三个要素:id,type,value。

== 运算符

  • 主要对 python 对象的 value 进行比较,如比较字符串,数字等
>>> a = 'python'
>>> b = 'python'
>>> a == b
True

is 运算符

  • 也称为同一性运算符,主要对 python 对象的 id 进行比较。
>>> a = [1,2,3]
>>> b = a   # 相当于将变量 a 的 value 值的地址赋给变量 b,而不是变量 a 本身的地址   
>>> c = [1,2,3]
>>> a is b
True
>>> a is c
False
>>> id(a), id(b), id(c)
(139847137782600, 139847137782600, 139847137803144)

以上例子中,a, b, c 三者的值相同,但关联对象的 id 这有前两个相同,变量 b 是通过赋值语句 = 创建的,= 的作用就是将变量关联的对象 id 传给新的变量,而不是变量本身的地址。

  • 在不同的数据类型情况下,使用 is 比较也会产生不同的结果
>>> a = 1
>>> b = 1
>>> a is b
True
>>> c = .5.5
>>> d = 5.5
>>> c is d
False

由上面的代码可见,同样是数值类型,整数类型和浮点数类型比较的效果不同。

>>> a = 'abc'
>>> b = 'abc'`
>>> a is b
False
>>> a = 'a'
>>> b = 'a'
>>> a is b
True

字符串和单个字符比较的结果也会不同。
对于单个字符的 str 类型和数值较小的 int 类型变量,python 通过重用对象内存的方法来提高运行效率,但对于数值较大的int 类型和长字符串就会另外分配新的内存。
另外,当变量a, b(变量 b 不是使用 b = a 创建的)是tuple, list, dict或set类型时,即使 a == b 为 True,a is b 的返回值也一定是 False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值