Python中的is关键字

2024-10-01 02:36:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

本书试图将其解释为对相同内存地址的测试(A is B,如果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:字符串在内存中是什么格式的?在


Tags: falsetrueis运算符s2s1内存地址dfjg
2条回答

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

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

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

所以当你用“==”进行测试时,两个字符串的值必须等于真。 如果使用“is”进行测试,则对象的引用必须相同。在

相关问题 更多 >