列表成员资格的细节

Chr*_*ris 6 python list

Python(特别是2.6.4)如何确定列表成员资格?我做了一些测试,看看它做了什么:

def main():
    obj = fancy_obj(arg='C:\\')
    needle = (50, obj)
    haystack = [(50, fancy_obj(arg='C:\\')), (1, obj,), needle]

    print (1, fancy_obj(arg='C:\\'),) in haystack
    print needle in haystack

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

产量:

False
True
Run Code Online (Sandbox Code Playgroud)

这告诉我Python可能正在检查对象引用,这是有道理的.有什么更明确的我可以看一下吗?

mik*_*kej 4

来自(非官方)Python 参考 Wiki

对于列表和元组类型,x in y当且仅当存在索引 i 且该索引x == y[i]为 true 时,才为 true。

因此,在您的示例中,如果fancy_obj类将 的值存储arg在实例变量中,并且要实现一个__eq__返回 True 的方法,如果被比较的两个fancy_objs值相同,arg(1, fancy_obj(arg='C:\\'),) in haystack返回 True。

标准库参考的相关页面是:内置类型,特别是5.6 序列类型