为什么可以在some_list中找到b列表,即使它不在some_list中?
>>> a = []
>>> b = []
>>> a is b
False
>>> some_list = [0, 1, 2, 3, a]
>>> some_list.index(b)
4
答案 0 :(得分:7)
.index
返回第4个位置,因为它比较a和b,两个空列表。他们是平等的。如果你做a is b
,它会比较对象的内存地址,它们是不同的,这就是这个表达式求值为False的原因。
In [1]: a = []
In [2]: b = []
In [3]: a == b
Out[3]: True
答案 1 :(得分:6)
Python的list.index
搜索测试是否相等,而非标识。 a
和b
不相同,但相同:
>>> a = []
>>> b = []
>>> a == b
True
如果您想要一个不同的相等定义,请在对象a,b上定义__eq__
,例如:
def __eq__(self, other):
return self is other
def __hash__(self):
return 0 # Insert a more sensible, object-specific hash function here
答案 2 :(得分:1)
他们是不同的:
a is b
只有当它们都绑定到同一个对象时,才为真。但是,index仅检查值是否相等。
举一个例子,3 == 3
但是
int a = 3;
int b = 3;
&a == &b // this is false
答案 3 :(得分:1)
尝试执行a == b
。 '=='运算符检查变量的值是否相同,索引函数也是如此。 is
函数comap变量id()。
这可能会有所帮助:
>>> a = []
>>> b = []
>>> id(a)
4299650400
>>> id(b)
4299730096
>>> a == b
True
>>> a is b
False
还要注意这一个:
>>> some_list = [0, 1, 2, 3, a]
>>> some_list.index(b)
4
>>> some_list[4] == b
True
>>> some_list[4] is b
False