Python 恒等运算符
| 关键字 | 运算符含义 |
|---|---|
is | 检查两边是否恒等 |
is not | 检查两边是否不恒等 |
python
# 使用运算符 is 检查 get() 函数是否返回 None
elements = {"hydrogen": 1, "helium": 2, "carbon": 6}
n = elements.get("dilithium")
print(n is None)
print(n is not None)
🔨 编译结果
python
True
False
恒等运算符与 == 运算符
区别
is恒等运算符比较的是两个实例对象是否完全相同(即占用的内存地址是否相同)==运算符比较的是两个对象的内容是否相等(占用内存地址可以不同)
引用赋值
python
>>> a = ["I", "love", "Python"]
>>> b = a
# a 的引用复制给 b,在内存中其实是指向了同一个对象
>>> b is a
True
# 查询存储变量值的内存位置
>>> id(a)
46381384
>>> id(b)
46381384
# a 与 b 内容也肯定是相等的
>>> b == a
True
注意
引用赋值两个变量会指向同一个对象,即 b 和 a 指向内存地址相同
但是需要注意只有变量值是可变对象(如列表)时,变量才指向相同的内存地址(更多解释可参考 列表可变性 Mutability)
非引用赋值
python
>>> a = ["I", "love", "Python"]
# b 通过切片操作重新分配了对象,值与 a 相同
>>> b = a[:]
>>> b is a
False
>>> id(a)
2305464487552
>>> id(b)
2305464435584
# 值仍然相等
>>> b == a
True
新建对象 b 与 a 指向了不同的内存地址,所以 b is a 的结果为 False