Python 里,什么对象能做到`a is a`返回`True`,而`a == a`返回`False`呢?

2018-05-29 19:01:52 +08:00
 hjq98765

同事考我这个问题,我答不上来,特来求助

>>> a is a
True

>>> a == a
False
4816 次点击
所在节点    Python
21 条回复
lifeishort
2018-05-29 19:06:37 +08:00
a=None 的时候是这样的
stamaimer
2018-05-29 19:08:01 +08:00
定义__equals__方法
ebingtel
2018-05-29 19:10:30 +08:00
@lifeishort @hjq98765
Python 2.7

>>> a = None
>>> None is None
True
>>> None == None
True
>>> True == True
True
>>> class A(object):
... def __eq__(self, a):
... return self is not a
...
>>> b = A()
>>> b is b
True
>>> b ==b
False
roy2220
2018-05-29 19:11:24 +08:00
math.nan
zhongyiio
2018-05-29 19:13:38 +08:00
可以参考下这个,不过没有你这个问题的答案。

http://blog.jobbole.com/113631/
lifeishort
2018-05-29 19:18:30 +08:00
@ebingtel
我记错了,感谢指正
cxyfreedom
2018-05-29 19:35:59 +08:00
自带的话 math.nan ,或者第三方库 numpy.NaN
flowfire
2018-05-29 19:39:10 +08:00
NaN 试一下?
jtsai
2018-05-29 19:43:19 +08:00
内存空间的问题 你 id () 一下
SingeeKing
2018-05-29 19:48:58 +08:00
正常情况下是没有的。
原因:is 是判断是不是一个( id 值相同),== 是判断是否相等(__eq__ 返回 True )
按照常理,id 相同必相等

但是确实可以。。。

whoami9894
2018-05-29 20:02:44 +08:00
```python
a = float("NaN")
print(a==a)
print(a is a)
```
pkookp8
2018-05-29 20:12:24 +08:00
@SingeeKing 这思路可以。。。
codeeer
2018-05-29 20:18:55 +08:00
引用类型
sammo
2018-05-29 20:20:49 +08:00
C++ 就没这么多破事
codehz
2018-05-29 23:37:10 +08:00
@sammo #14 C++ 浮点数 NaN 也是自身不相等的,只要是按照 IEEE 标准设计的浮点数,都要满足 NaN != NaN
phithon
2018-05-29 23:52:31 +08:00
phithon
2018-05-29 23:53:12 +08:00
想了个反的,哈
goinghugh
2018-05-30 10:02:28 +08:00
`is`判断是否是同一个对象,即 2 个的引用是否指向同一个对象;
`==`返回的是`__eq__`的返回值。

![]( )

在题主的问题里,只要是指向同一个对象,a is a 都是为 True,a==a 可以通过重写`__eq__`方法达成目的
GeruzoniAnsasu
2018-05-30 11:40:13 +08:00
@sammo
@codehz
感谢两位让我今天想例子的时候才发现原来浮点数不能作为 non-type 模板参数以及浮点数相除不是一个常量表达式。。
lifeishort
2018-05-31 08:01:22 +08:00
把 js 的 NAN 和 python 搞混了,尴尬的一楼。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/458741

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX