【问题标题】:python difference between "==" and "is" when compare object properties [duplicate]比较对象属性时“==”和“is”之间的python区别[重复]
【发布时间】:2014-06-29 20:01:43
【问题描述】:

我不确定为什么在检查或比较对象的属性时会有差异。对象构造器:

class FooBarObject():
    def __init__(self, val_1, val_2):
        self.val_1 = val_1
        self.val_2 = val_2

对象已创建:

obj = FooBarObject(val_1 = "gnd", val_2 = 10). 

我注意到在以下情况下会得到不同的结果:

obj.val_1 is "gnd"
obj.val_1 == "gnd"
>>> False
>>> True

我在这里做错了什么?

【问题讨论】:

  • is 测试对象身份== 测试平等。测试之间有不同的世界。如果两个引用指向两个不同的对象,身份测试将失败,但是这两个对象仍然可以测试为 equal
  • 不太确定。如果我只检查或比较属性值,我会得到正确的结果 val_1 = "gnd" val_2 = 10 val_1 is "gnd" val_2 == "gnd" >>>True >>>True
  • 解释器可以重用现有的字符串对象作为优化,但你不应该依赖行为。
  • @MartijnPieters 我的回答是指您的第一篇文章。这两个引用指向一个对象和一个对象的属性。只有两个不同的函数用于比较值。

标签: python python-2.7 boolean boolean-logic boolean-expression


【解决方案1】:
obh.val_1 is "gnd"

比较内存中的两个对象是否是同一个对象。 Python 有时会实习字符串以便在它们相同的情况下重用它们。使用“is”来比较字符串并不总是有可预测的结果。在另一种意义上,你有点叫

id(obh.val_1) == id("gnd") #id demonstrates uniqueness

使用“==”表示字符串相等以实现您的意图。

【讨论】:

    【解决方案2】:

    当你使用"=="时,你是在比较内存中变量的内容,所以任何匹配都会产生“真”,但是当使用"is"时,RAM中的地址需要相同,所以这将导致错误,因为它们存储在内存中的不同位置

    【讨论】:

      猜你喜欢
      • 2012-07-19
      • 1970-01-01
      • 2010-11-19
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      相关资源
      最近更新 更多