您的位置:首页 > 编程语言 > Python开发

Python is与==

2020-02-01 04:40 811 查看

一句话概括

is用于对象引用比较,==用于值比较

实例

>>> t1 = 1024
>>> t2 = 1024
>>> t1 == t2
True
>>> t1 is t2
False
>>> s1 = 'h%e'
>>> s2 = 'h%e'
>>> s1 == s2
True
>>> s1 is s2
False
>>> l1 = [1,2,3]
>>> l2 = [1,2,3]
>>> l1 == l2
True
>>> l1 is l2
False

考虑到Python对0~256的数值,以及常见字符串作了常量池优化,这样指向同一个对象,当使用is判定时结果为True

>>> t1 = 256
>>> t2 = 256
>>> t1 is t2
True
>>> s1 = 'hello'
>>> s2 = 'hello'
>>> s1 is s2
True

重载==(__eq__)

前面的实例,

l1 = [1,2,3]
l2 = [1,2,3]
,当比较
l1 == l2
是返回True,这是由于内置类型list对象重载了==,也就是实现了
__eq__
方法,如下定义了User类,并且重载了
__eq__

>>> class User:
...     def __init__(self, name, age):
...         self.name = name
...         self.age = age
...     def __eq__(self, other):
...         if not isinstance(other, User):
...             return False
...         return [self.name, self.age] == [other.name, other.age]
...
>>> u1 = User('test',18)
>>> u2 = User('test',18)
>>> u1 == u2
True
>>> u1 is u2
False
>>> u3 = User('hello', 18)
>>> u4 = User('world', 18)
>>> u3 == u4
False
>>> u3 is u4
False

转载于:https://my.oschina.net/athantang/blog/1798123

  • 点赞
  • 收藏
  • 分享
  • 文章举报
chipizan9676 发布了0 篇原创文章 · 获赞 0 · 访问量 20 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: