3

当我阅读“Learning Python”时,我对使用is运算符感到困惑。

本书试图将其解释为对相同内存地址的测试(A is B, if True,表示 A 和 B 位于同一内存地址中),但在以下情况下,这种解释似乎不成立。谁能帮我理解这个功能?

  s2='ufysdjkhflakjhsdjkfhasdhfoqwhefuhalskdjfhwuioehfjkasdhfljahsdjwade'
  s1='ufysdjkhflakjhsdjkfhasdhfoqwhefuhalskdjfhwuioehfjkasdhfljahsdjwade'
  s1==s2,s1 is s2
  (True, True)

  s1='flashmanfdsafsdfasdfsdffgj;djg;alkjdfgl;kajdfl;gjkla;dfjg;lakdfj;'
  s2='flashmanfdsafsdfasdfsdffgj;djg;alkjdfgl;kajdfl;gjkla;dfjg;lakdfj;'
  s1==s2,s1 is s2
  (True, False)

  s2='ufysdjkhflakjhsdjkfhasdhfoqwhefuhalskdjfhwuioehfjkasdhfljahsdjwade'
  s1='ufysdjkhflakjhsdjkfhasdhfoqwhefuhalskdjfhwuioehfjkasdhfljahsdjwade'
  s1==s2,s1 is s2
  (True, True)

  s1=';;'
  s2=';;'
  s1==s2,s1 is s2
  (True, False)

PS:字符串在内存中存在什么样的格式?

4

2 回答 2

4

这是 CPython(标准 Python 解释器)的一个实现细节,它将为一些不可变类型(如字符串和整数)重用内存中的相同数据。您不能依赖此类行为,因此您应该始终使用==来比较此类类型。

有关更深入的答案,请参阅https://stackoverflow.com/a/15541556/1544347

于 2013-07-10T09:02:35.807 回答
1

是比较参考,“==”是“ eq ”方法的语法糖。

因此,当您使用“==”进行测试时,两个字符串的值必须等于 true。如果您使用“is”进行测试,则对象必须具有相同的引用性。

于 2013-07-10T09:05:40.697 回答