为什么可以在some_list中找到b列表,即使它不在some_list中?
>>> a = []
>>> b = []
>>> a is b
False
>>> some_list = [0, 1, 2, 3, a]
>>> some_list.index(b)
4
Run Code Online (Sandbox Code Playgroud)
.index返回第4个位置,因为它比较a和b,两个空列表.他们是平等的.如果这样做a is b,它会比较对象的内存地址,它们是不同的,这就是为什么这个表达式的计算结果为False.
In [1]: a = []
In [2]: b = []
In [3]: a == b
Out[3]: True
Run Code Online (Sandbox Code Playgroud)
Python的list.index搜索测试的是相等,而不是身份.a并且b不相同,但相同:
>>> a = []
>>> b = []
>>> a == b
True
Run Code Online (Sandbox Code Playgroud)
__eq__如果您想要不同的相等定义,请定义对象a,b,例如:
def __eq__(self, other):
return self is other
def __hash__(self):
return 0 # Insert a more sensible, object-specific hash function here
Run Code Online (Sandbox Code Playgroud)