【问题标题】:Using object id as a hash for objects in Python在 Python 中使用对象 id 作为对象的哈希值
【发布时间】:2010-01-11 05:36:30
【问题描述】:

使用对象id 作为散列键(通过__hash__)以便能够为单个程序实例散列其他可变对象是否明智?使用对象属性会更好,但它们都是可变的并且可以更改。

我在查看 Sets of instances 时想到了这件事,我想知道这是否明智。

【问题讨论】:

    标签: python hash


    【解决方案1】:

    是的,只要您还与此一致地定义 __eq__(并且可能是 __ne__!-)。 IOW,没关系,只要您对a==b 的含义与a is b 完全相同!-)

    【讨论】:

    • 谢谢。你的第二句话说得很好。
    【解决方案2】:

    对于大多数 Python 类,这是默认行为。不可散列的不可散列是有充分理由的:它们是可变集合。

    对于集合而言,基于其内容的相等性具有相等关系(由__eq__() 定义)是可行的。这一点,以及 __hash__() 与相等性一致的要求,当然会使 __hash__() 可变,这对于包含此类对象的集合来说是可怕的。

    所以你可以这样做,但它会花费你基于内容的相等关系。

    【讨论】:

      猜你喜欢
      • 2011-03-29
      • 2014-09-01
      • 1970-01-01
      • 2013-06-30
      • 2011-01-17
      • 2011-03-13
      • 1970-01-01
      • 2018-05-15
      • 2021-07-19
      相关资源
      最近更新 更多