正在搜索python列表中的空列表是否不准确?

Cha*_*row 1 python list

为什么可以在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)

cul*_*rón 7

.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)

  • @tom:这是小字符串的实现细节,但是`a ="Hello"*1000; b ="你好"*1000; (a是b)== False. (2认同)

phi*_*hag 6

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)