当我读“学习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:内存中存在哪种格式的字符串?
答案 0 :(得分:4)
这是CPython(标准Python解释器)的实现细节,它将在内存中为一些不可变类型(如字符串和整数)重用相同的数据。您不能依赖此类行为,因此您应始终使用==
来比较此类型。
要获得更深入的答案,请参阅https://stackoverflow.com/a/15541556/1544347
答案 1 :(得分:1)
比较参考,“==”是“ eq ”方法的语法糖。
因此,当您使用“==”进行测试时,两个字符串的值必须等于true。 如果使用“is”进行测试,则对象必须相同。