Python 的 __eq__ 与 __hash__:自定义对象放进 set/dict 却报错、查不到的坑
你写了个Point类,两个坐标相同的点理应「相等」。于是你重写了__eq__,自测p1 == p2返回True,很满意。结果把它们放进set去重,直接抛;好不容易绕过去了,又发现拿一个内容相同的对象去dict里查怎么都是KeyError。明明相等,为什么放不进、查不到?问题出在:你只改了__eq__,没管__hash__。这篇讲清楚这两个方法的契约关系,以及怎么正确让自定义对象能进 set/dict。
codedevin2026-09-07 16:32:38