Python 中, is 和 == 都可以比较两个对象, 但是它们的不同点在于:
1. is 通过 id() 函数判断两个对象是否相等,== 判断它们的值
- >>> a = 126; b = 126
- >>> a is b // a 和 b 同时赋给 126,id 相等
- True
- >>> a = 257; b = 257
- >>> a is b // a 和 b 同时赋给 257,id 相等
- True
- >>> a = 257
- >>> b = 257
- >>> a is b // id(257) 不是固定的, 所以不等
- False
- >>> a == b // 值依然相等
- True
2. == 可以通过对象的__eq__方法来修改
- class int_number:
- def __init__(self, num):
- if type(num) == int:
- self.value = num
- else:
- print("error")
- def __eq__(self, num):
- if self.value == num:
- return True
- else:
- return False
这样我们就自造了一个 int 类型, 下面来试验一下
- >>> a = int_number(124.5)
- error
- >>> a = int_number(124)
- >>> a == 124
- True
- >>> a == 126
- False
- >>> a is 124
- False
可以看出, 虽然我们修改 a 的__eq__方法让它 "等于"124, 但用 is 比较还是不等的.
来源: http://www.bubuko.com/infodetail-2749263.html