Why is this string comparison returning False?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
String comparison in Python: is vs. ==
号
1 2 3 | algorithm = str(sys.argv[1]) print(algorithm) print(algorithm is"first") |
我用参数
1 2 | first False |
号
从python文档中:
The operators is and is not test for object identity: x is y is true if and only if x and y are the same object.
号
这意味着它不检查值是否相同,而是检查它们是否在相同的内存位置。例如:
1 2 3 | >>> s1 = 'hello everybody' >>> s2 = 'hello everybody' >>> s3 = s1 |
号
注意不同的内存位置:
1 2 3 4 | >>> id(s1) 174699248 >>> id(s2) 174699408 |
但由于
1 2 | >>> id(s3) 174699248 |
。
使用
1 2 3 4 5 6 | >>> s1 is s2 False >>> s3 is s1 True >>> s3 is s2 False |
但如果使用相等运算符:
1 2 3 4 5 6 | >>> s1 == s2 True >>> s2 == s3 True >>> s3 == s1 True |
。
编辑:只是让人困惑的是,有一个优化(无论如何,在cpython中,我不确定它是否存在于其他实现中),它允许将短字符串与
1 2 3 4 5 6 7 8 | >>> s4 = 'hello' >>> s5 = 'hello' >>> id(s4) 173899104 >>> id(s5) 173899104 >>> s4 is s5 True |
。
显然,这不是你想依赖的东西。如果要比较标识,请对作业使用适当的语句-
你想要:
1 2 3 | algorithm = str(sys.argv[1]) print(algorithm) print(algorithm =="first") |
注意,
基本上,