当前位置: 首页 > 面试题库 >

Python-为什么使用'=='或'is'比较字符串有时会产生不同的结果?

须旭
2023-03-14
问题内容

我有一个Python程序,其中两个变量被设置为值’public’。在条件表达式中,比较var1是var2,但如果将其更改为var1==var2,则返回True。

现在,如果我打开Python解释器并进行相同的is比较,则此操作成功。

>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True

我错在哪里?


问题答案:

1481

is是身份测试,==是平等测试。你的代码中发生的情况将在解释器中进行模拟,如下所示:

>>> a = 'pub'
>>> b = ''.join(['p', 'u', 'b'])
>>> a == b
True
>>> a is b
False

所以,难怪他们不一样吧?

换句话说:is is id(a) == id(b)



 类似资料:
  • 问题内容: 好的,这很愚蠢,但是wtf还在继续吗? 我在Servlet中有一个String变量,它接受参数的值,并基于该值进行测试以执行某些操作,但是该方法不起作用。问题是什么? 在控制台上,System.out.println向我显示了动作的价值是“某物” 问题答案: 您的第二个比较是错误的。您还应该使用代替,例如: 该运算符比较 引用 的(字符串)对象和正常情况下 等于 字符串不自动具有相同的

  • 为什么运算符只应该是4个字节却生成12个字节?当我引用变量时,这只是引用数组第一个索引的内存地址。实际上,我打印了第一个索引的内存地址,并将其与进行了比较,它们产生了相同的内存地址结果,这证实了它们都引用了数组的第一个索引,但是“array”产生了12个字节,而产生了4个字节。

  • 这里有2个测量: 正如您所见,比较两个匹配的字符串比比较两个大小相同但不匹配的字符串要快。这是非常令人不安的:在字符串比较期间,我认为python是逐字符测试字符串的,所以应该比更长,因为它需要对1进行4次测试才能进行不匹配的比较。可能比较是基于哈希的,但在这种情况下,两种比较的计时应该相同。 你知道为什么吗?

  • 问题内容: 我试图比较2个1000字节的字符串,并想知道差异的确切位置,即;字符串与哪个字节不同。.是否有任何函数可以确定它? 问题答案: 我试图测试此处给出的答案,并且提出了另一个 更快 (通常情况下)的解决方案,尽管它不太优雅。 首先,让我们看看所提出的解决方案有多快: 如您所见,genexp比快很多,但这可能是由于它比查找第一个非等号字符要好得多。 现在,我们如何加快速度?好吧,我们可以使用

  • 问题内容: 我有一个Android应用程序,我想检查安装的应用程序名称是否与传递给包含此代码的函数的字符串匹配。代码和示例如下: 假设您打过电话,并且手机上的应用程序名称与返回的名称相同。但是,它永远不会。我记录了结果,它应该匹配,但事实并非如此。任何人都可以请问我为什么这行不通吗? 问题答案: 使用String的equals()方法代替==运算符来比较字符串: 在Java中,新手遇到的最常见错误

  • 问题内容: 考虑以下代码: 为什么会这样呢? 为确保以上内容正确无误,我刚刚在Windows上的Python 2.5.4、2.6.5、2.7b2,Python 3.1和Linux上的Python 2.7b1上进行了测试。 看起来所有这些对象之间都具有一致性,所以这是设计使然。我想念什么吗? 我只是从我的一些个人域过滤脚本中发现失败了。 问题答案: 验证对象的身份,和Python,任何执行时,它符合