《Python 对象比较的艺术:从 eq 到 hash 的协奏曲》
一、引言:你真的了解对象的“相等”吗?
在 Python 中,我们经常使用 == 来判断两个对象是否相等。但你是否思考过:**什么决定了两个对象是否“相等”?**又是什么让对象可以作为字典的键或集合的元素?
这背后,是两个魔法方法在默默协作:__eq__ 与 __hash__。
这篇文章将带你深入理解 Python 中的对象比较机制,揭示为什么实现 __eq__ 时也要实现 __hash__,并通过一个简单的 Point(x, y) 类演示其中的陷阱与最佳实践。
二、背景介绍:Python 的对象模型与集合语义
Python 是一门高度面向对象的语言,几乎所有数据结构都依赖对象的行为定义:
- 字典使用对象的哈希值定位键。
- 集合使用哈希值去重。
==运算符依赖__eq__判断对象是否相等。
这意味着,如果你自定义了对象的“相等性”,却没有定义它的“哈希性”,那么集合类的行为可能会变得不可预测,甚至导致逻辑错误。

订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



