【问题标题】:double equals vs is in python [duplicate]双等于vs在python中[重复]
【发布时间】:2013-02-07 03:19:06
【问题描述】:

我在 Python 解释器中运行以下命令:

>>> foo = 10
>>> dir(foo) == dir(10)
True
>>> dir(foo) is dir(10)
False
>>> 

这是为什么?

【问题讨论】:

    标签: python comparison boolean equals equality


    【解决方案1】:

    is 检查两个参数是否指向同一个对象,== 检查两个参数是否具有相同的值。 dir() 返回一个 list,其中包含 foo10 的相同数据,但两者的实际 list 实例不同。

    【讨论】:

    • 一个很好的例子是 1==True 返回 True,但 1 是 True 返回 False。
    • 更直接相关的一点是dir(10) is dir(10) 甚至不会是True(除非进行某种解释器优化),而dir(1) == dir(10) 将是True
    • 可以说python中的“is”与PHP等其他语言中的“===”是一样的。
    • 这可能属于一个单独的问题,但数字对象在 python 中吗? 1 is 1怎么会返回True
    • @frank 是的,整数是对象。尝试type(1)a = 1;a.__class__ 等。您必须深入了解解析器的内部结构,才能完全了解哪些整数具有哪些身份(如果有记忆,还有一些实习和其他单例驱动的优化正在进行),但足以说由整数文字组成的 2 个表达式有时可以是同一个对象,有时不是。例如,至少在我的 Python 3.6 中,1 is 1a = 1;b = 1;a is b 都是 True1 is 10 / 10False
    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2017-03-21
    • 2012-02-21
    • 2011-03-18
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多