【问题标题】:Checking Objects and Values using Is Operator in Python [duplicate]在 Python 中使用 Is 运算符检查对象和值
【发布时间】:2021-12-17 12:00:20
【问题描述】:

为什么会这样:

x = str(input("Enter a string: "))       #input "cat"
y = str(input("Enter another string: ")) #input "cat"
print(x is y) #Outputs False

和这个不一样:

x = "cat"
y = "cat"
print(x is y) #Outputs True

【问题讨论】:

  • 为什么你认为应该是一样的?这些结果中哪一个是出乎意料的?你了解is 运算符的作用吗?
  • 在第一个 sn-p 中,x 和 y 要求一个字符串。另一方面,它已经设置为相同的字符串。我不太明白当第二个返回 true 时第一个 sn-p 如何返回 false。
  • @ChristianSalinas 为什么?您了解is 运算符的作用吗?再说一次,你期待什么
  • 从其中一个链接副本中查看this answer,我认为它非常详细地解决了所有问题

标签: python string boolean


【解决方案1】:

来自this真正的 Python 文章:

== 运算符比较两个对象的值或相等性,而 Python is 运算符检查两个变量是否指向内存中的同一个对象。在绝大多数情况下,这意味着您应该使用相等运算符 == 和 !=,除非您与 None 进行比较。

>>> x = None
>>> y = None
>>> id(x); id(y)
4389651888
4389651888
>>> x is y
True

==调用对象的__eq__方法,is检查两个对象的id()是否相等(内存地址)。

我链接的文章的其余部分内容非常丰富;它讨论了 Python 如何默认为小整数赋予相同的 id,并且您可以使用sys.intern() 方法来确保字符串变量也指向内存中的相同对象。

【讨论】:

    【解决方案2】:

    python中的is运算符用于检查两个对象是否指向同一个内存位置。

    在第二种情况下,当 python 运行时,出于优化目的,x 和 y 都指向相同的内存位置。但是,在第一种情况下,直到用户在运行时输入值才定义 x 和 y。因此,它们都在不同的位置分配了内存。

    【讨论】:

    • "这已经在 SO 上回答过很多次了。"那么它应该被标记为重复...
    猜你喜欢
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    相关资源
    最近更新 更多