Python新手问询:为何比较两个列表的sort表达式返回False?
为什么
A.sort == B.sort的比较结果为False 这个结果完全来自对Python方法调用逻辑的典型认知偏差:
- 你写的代码根本没触发排序逻辑
方法名后面不带圆括号时,不会执行方法内部的任何代码。你写的A.sort拿到的不是排序完成后的结果,而是绑定在当前列表实例上的sort方法对象本身;同理B.sort是绑定在B列表上的sort方法对象。 - 绑定方法的相等判断规则
Python判断两个绑定方法是否相等的核心依据是:这两个方法是否绑定到了内存中完全同一个类实例上。因为A和B是两个完全独立的列表对象,各自绑定的sort方法自然无法判定为相等,所以最终返回False。
对应你原本的预期
你以为写A.sort就会触发原地排序,但实际上只有带圆括号的A.sort()才是真正的方法调用:
- 列表的
sort()是原地排序方法,执行后不会返回排序完成的列表,方法的返回值固定为None - 如果你真的调用两个列表的sort方法再比较结果:
C = A.sort() == B.sort() print(C) # 此时输出True,因为两边的返回值都是None print(A, B) # 两个列表都会被原地修改为[1,2,3,4]
这是Python初学者非常容易踩的坑:没有圆括号的方法名只是对方法的引用,不会触发任何内部执行逻辑,哪怕是会原地修改列表的方法也一样。
内容的提问来源于stack exchange,提问作者Alpha_Omega
相关产品推荐
相关产品推荐

