同一运算符
同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址。
运算符 | 描述 |
is | is 是判断两个标识符是不是引用同一个对象 |
is not | is not 是判断两个标识符是不是引用不同对象 |
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个,既比较对象的地址。
== 用于判断引用变量引用对象的值是否相等,默认调用对象的 __eq__()方法。
例1,命令行模式下:
>>> a = 100
>>> b = 100
>>> id(100)
140716374663936
>>> id(a)
140716374663936
>>> id(b)
140716374663936
>>> a is b
True
>>> a == b
True
>>> a = 1000
>>> b = 1000
>>> a is b
False
>>> id(1000)
2404914035472
>>> id(a)
2404914035440
>>> id(b)
2404914035600
>>> a = b = 1000
>>> a is b
True
整数缓存问题
Python 仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是在命令行中执行,而在 Pycharm 或者IDLE保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化(范围任意数?)。
老师:is 运算符比 == 效率高,在变量和 None 进行比较时,应该使用 is。
- IDLE文件执行
源码:
a = -266666
b = -266666
print(a is b)
a = -5
b = -5
print(a is b)
a = 1000000000
b = 1000000000
print(a is b)
a = 3.14
b = 3.14
print(a is b)
运行结果:
True
True
True
True