Python中==和is的适用场景

本文探讨Python中==和is的区别。在Python中,对于小整数和特定字符串,存在存储优化,例如小整数在[-5, 255]范围内会重复使用同一地址,字符串则有驻留机制。is操作符用于检查两个对象是否是同一个对象,而==则检查它们的值是否相等。虽然通常情况下,is会伴随==一起为True,但两者并不相同,is检查的是对象标识,而==检查的是值的等价性。" 94866553,8669879,VMware vCenter Converter迁移Linux虚拟机详解,"['运维', '操作系统', 'VMware', 'Linux']
摘要由CSDN通过智能技术生成

Python中==和is的区别

1. python中变量的存储优化

小整数

为了优化存储空间,python为小整数([-5,255])分配固定的存储空间,当变量为小整数时,对象直接指向该小整数对应的地址。

id() 返回对象的唯一标识符,标识符是一个整数。Cython中id()获取对象的内存地址。

举个栗子:

>>> a = 1
>>> b = 1
>>> id(a)
94735761692056
>>> id(b)
94735761692056
>>> c = [1,0,1]
>>> id(c[0])
94735761692056
>>> id(c[2])
94735761692056

>>> d = 10240
>>> e = 10240
>>> id(d)
94735762059952
>>> id(e)
94735762059904

可见,所有值为1的变量在内存中的标识都是一样的。

字符串驻留

Python 中的空字符串和 ASCII 字符都会使用到字符串驻留(string interning)技术。怎么理解?你就把这些字符(串)看作是单例的就行。也就是说,两个相同内容的字符串如果使用了驻留的技术,那么内存里面其实就只开辟了一个空间。

除此之外,字符长度不超过 20 的串也使用到了同样的技术。

继续举栗:

>>> a = 1
>>> b = 'abc'
>>> c = [1, 'abc']
>>> d = [1, 'abc']
>>> 
>>> id(b)
140668511832944
>>> id(c[1])
140668511832944

>>> e = b * 7
>>> f = b * 7
>>> id(b)
140668511832944
>>> id(e)
140668511854704
>>> id(f)
140668511854768

2. is和==操作的意义

操作符意义说明
isobject identity比较对象的标识符 id(obj)
==equal值是否相等

因此,a is b基本相当于id(a)==id(b),而==才是判断两个对象的值是否相等。

a == b相当于a.__eq__(b),所以 ==可以被重载,而is不能被重载。

通常,a is b为True时,a == b 也为True。特殊情况,如NaNNan != NaN

>>> a = float('NaN')
>>> a is a
True
>>> a == a
False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值