是Python中的关键字

是Python中的关键字,python,python-2.7,Python,Python 2.7,当我阅读“学习Python”时,我对使用is操作符感到困惑 本书试图将其解释为对相同内存地址的测试(a是B,如果True,则表示a和B位于相同的内存地址),但在以下情况下,此解释似乎不成立。谁能帮我理解这个函数 s2='ufysdjkhflakjhsdjkfhasdhfoqwhefuhalskdjfhwuioehfjkasdhfljahsdjwade' s1='ufysdjkhflakjhsdjkfhasdhfoqwhefuhalskdjfhwuioehfjkasdhfljahsdjwa

当我阅读“学习Python”时,我对使用
is
操作符感到困惑

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

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


有关更深入的答案,请参见Is比较参考,“==”是“eq”方法的语法糖

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

Python尽量避免在可行的情况下创建新的字符串对象。字符串是不可变的,因此相同的值也可以是相同的对象,从而节省内存和CPU时间来分配额外的内存。