Python中运算符 is 和 == 的区别

本文通过实例深入解析了Python中'is'与'=='运算符的区别,'=='检查对象是否相等,而'is'则检查它们是否完全相同,即是否为同一对象。并警告不要将'is'用于基本类型如数字和字符串。

Python 中有个很有趣的运算符–is,其作用看似和==是一样的,但实际上并非如此。

通过一个示例来看一下两者的去区别:

>>> a = b = [1,2,3]
>>> c = [1,2,3]
>>> a == b
True
>>> a == c
True
>>> a is b
True
>>> a is c
False

前几个示例没啥问题,但是最后一个a is c 返回 False,为什么会这样呢?因为 is 检查的是两个对象是否相同,而不是相等,变量 x 和 y 指向同一个列表,而c 指向另一个列表,虽然两个的值都是一样,但是并不是同一个对象,所以这里 a is c 返回 False

再来看个示例,可以更加说明这一点:

>>> a = [1,2,3]
>>> b = [2,1]
>>> a is not b
True
>>> del a[2]
>>> a
[1, 2]
>>> b.reverse()
>>> b
[1, 2]
>>> a==b
True
>>> a is b
False

从上例可以看到,a 和 b 一开始就不是同一个列表值,所以 a is not b自然返回的是 False,经过调整将a 和 b 的值修改成一样,这时候 a==b返回 True,而 a is b 依然返回False。
很显然这两个列表相等,但并不相同。
总之,==是用来检查两个对象是否相等,而 is 用来检查两个对象是否相同。

注意:不要将 is 用于数字或字符串这种不可变的基本值。鉴于 Python内部处理这些对象的方式,这种做法的接口将会不可预测。

本书知识点来源于《Python 基础教程》第三版。

### Python 中的运算符 #### 一、算术运算符 这些运算符处理数值数据并执行基本数学计算。 | 符号 | 名称 | 描述 | |--|--------------|--------------------------| | `+` | 加 | 将两个数相加 | | `-` | 减 | 从左操作数减去右操作数 | | `*` | 乘 | 左右两数相乘 | | `/` | 浮点除 | 返回浮点商 | | `%` | 取模(求余) | 返回整除后的余数 | | `//` | 整除 | 返回商的整数部分 | | `**` | 幂 | 执行幂次方运算 | 例如,使用幂运算符可以轻松完成指数根式的计算[^2]: ```python print('5 的 2 次方:', 5 ** 2) # 输出: 25 print('4 的开平方:', 4 ** 0.5) # 输出: 2.0 print('27 的开立方:', 27 ** (1/3)) # 输出: 3.0 ``` #### 二、比较运算符 用于对比两个值之间的关系: | 符号 | 名称 | 描述 | |------|------------------|----------------------------| | `<` | 小于 | 如果左边小于右边则返回True | | `<=` | 小于等于 | 如果左边不大于右边则返回True | | `>` | 大于 | 如果左边大于右边则返回True | | `>=` | 大于等于 | 如果左边不小于右边则返回True | | `==` | 等于 | 如果两边相同则返回True | | `!=` | 不等于 | 如果两边不同则返回True | #### 三、逻辑运算符 用来组合条件表达式: | 关键字 | 含义 | 解释 | |--------|--------------------|--------------------------------| | and | 与 | 当且仅当所有条件都为真时才为真 | | or | 或 | 至少有一个条件为真即为真 | | not | 非 | 对布尔值取反 | #### 四、位运算符 作用于按位表示的数据上: | 符号 | 名称 | 功能描述 | |------|--------|----------------------------------| | `&` | 按位与 | 若相应位均为1,则该位结果为1;否则为0 | | `\|` | 按位或 | 若任意一位为1,则该位结果为1;全为0则为0 | | `^` | 异或 | 若两位不同,则该位结果为1;同则为0 | | `~` | 反转 | 把每一位翻转 | | `<<` | 左移 | 将左侧的操作数向左移动指定数量的位置 | | `>>` | 右移 | 将左侧的操作数向右移动指定数量的位置 | #### 五、成员运算符 测试序列中是否存在某个元素: | 符号 | 描述 | |------|----------------------------------| | in | 如果在指定序列中找到值则返回 True | | not in | 如果未在指定序列中找到值则返回 True| #### 六、身份运算符 判断对象是否属于同一内存地址: | 符号 | 描述 | |------|------------------------------------| | is | 如果两个变量指向同一个对象则返回 True | | is not | 如果两个变量不是指向同一个对象则返回 True| #### 七、赋值运算符 除了简单的等号外还有复合形式可用于简化连续操作: | 符号 | 表达式等价转换 | |------|-----------------------------------| | `=` | a = b | | `+=` | a += b -> a = a + b | | `-=` | a -= b -> a = a - b | | `*=` | a *= b -> a = a * b | | `/=` | a /= b -> a = a / b | | `%=` | a %= b -> a = a % b | | `//=`, `**=`, `&=`, `\|=`, `^=`, `>>=`, `<<=` | 类似上述模式对应不同的基础运算符 | 关于特殊字符`@`,这是专门设计给矩阵乘法使用的运算符,在标准库中的 NumPy 库里得到了广泛应用。然而需要注意的是,并无任何内建类型直接实现了这个功能[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luoyayun361

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值