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可能正在检查对象引用,这是有道理的.有什么更明确的我可以看一下吗?
对于列表和元组类型,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。