Python 中 is 的使用

本文详细解析了Python中'=='和'is'运算符的不同作用,'=='用于比较值的相等性,而'is'则判断两个对象是否指向同一个内存地址。深入探讨了整数和字符串的缓存机制及其对'is'运算符的影响。
部署运行你感兴趣的模型镜像

在 Python 中,进行数值比较时会用到 “==” 运算符,那么怎么判断两个变量的地址是否相同呢?这里会用到 “is” 关键字。

变量基本要素

Python 中,对于任意的变量都具有三个基本要素:分别是 id,type,value。其中 id 为身份标识,即唯一能识别变量的标志,type 为数据类型,value 为数据值。在定义变量之后,可以看到这几个基本要素:

>>> a = 1
>>> id(a)
1779264528
>>> type(a)
<class 'int'>
>>> a
1

== 比较运算符

“==” 主要用于判断两个对象的 value 是否相等,属于 Python 标准操作符中的比较运算符。

>>> 1 == 1
True
>>> 1 == 2
False
>>> a = 1
>>> b = 2
>>> a == b
False

is 同一性运算符

“is” 主要用来判断两个对象的身份标识,即两者的基本要素 “id”,也叫做同一性运算符。

>>> a = 1
>>> b = 1
>>> a == b
True
>>> a is b
True
>>> c = 1.0
>>> d = 1.0
>>> c == d
True
>>> c is d
False
>>> e = "abc"
>>> f = "abc"
>>> e == f
True
>>> e is f
True
>>> g = [1,2,3]
>>> h = [1,2,3]
>>> g == h
True
>>> g is h
False
>>> i = (1,2,3)
>>> j = (1,2,3)
>>> i == j
True
>>> i is j
False

从上面可以看出,“is” 同一性运算符的运行结果与 “==” 比较运算符的运算结果不同。

在 Python 中,整型对象和字符串对象是不可变对象,所以 Python 会很高效地对它们进行缓存。因此在程序上看应该创建新对象时,却并不会创建新对象,而是对它们进行缓存。

但 Python 仅缓存简单整型,因为 Python 认为在程序中这些小整型会经常被用到。而 Python 缓存的值也是有一定范围的,并且是可变的,使用时要注意。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

Python中 `is` 是一个关键字,属于身份运算符,用于判断两个变量是否引用同一个内存对象,即比较它们的身份(是否为同一个对象)。若两个对象是同一个对象,`is` 返回 `True`;否则返回 `False`,这与比较对象值是否相等的 `==` 操作符不同。其底层逻辑通过比较 `id()` 函数返回的对象内存地址实现,以下示例展现了 `is` 关键字的使用: ```python a = [1, 2, 3] b = [1, 2, 3] c = a print(a == b) # 输出: True,因为a和b的值相等 print(a is b) # 输出: False,因为a和b是不同的对象 print(a is c) # 输出: True,因为a和c是同一个对象 print(id(a) == id(b)) # 输出: False,a和b内存地址不同 print(id(a) == id(c)) # 输出: True,a和c内存地址相同 ``` 在不同数据类型的比较中,`is` 关键字也呈现出不同的特性。小整数对象和相同的字符串字面量在 Python 中会被缓存或指向同一对象,使用 `is` 比较会返回 `True`;而列表等对象即使内容相同,也是不同对象,`is` 比较返回 `False`。以下是不同数据类型比较的示例: ```python # 比较两个整数对象 a = 10 b = 10 print(a is b) # 输出: True,因为小整数在 Python 中是缓存的 # 比较两个字符串对象 str1 = "hello" str2 = "hello" print(str1 is str2) # 输出: True,因为相同的字符串字面量在 Python 中会指向同一个对象 # 比较两个列表对象 list1 = [1, 2, 3] list2 = [1, 2, 3] print(list1 is list2) # 输出: False,因为即使内容相同,两个列表也是不同的对象 # 比较变量和 None x = None print(x is None) # 输出: True,用于检查变量是否为 None 的常用方法 ``` `is` 关键字的常见应用场景包括单例验证和 `None` 判断等。例如,检查一个变量是否为 `None` 时,使用 `is None` 是最佳实践,因为 `None` 在 Python 中是单例对象,使用 `is` 能准确判断变量是否指向该单例对象[^1][^3][^4]。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值