擅长:python、mysql、java
<p>您描述的问题只能由<code>self</code>实现了<code>__eq__</code>(或<code>__cmp__</code>)而没有实现相应的{<cd4>}而引起。如果您没有实现<code>__hash__</code>方法,通常情况下您不能使用定义<code>__eq__</code>但不能{<cd4>}的对象作为dict键,但是如果您继承了一个可能会错过的<code>__hash__</code>。在</p>
<p>如果您确实实现了<code>__hash__</code>,那么必须确保它的行为是正确的:在对象的生存期内(或者至少只要对象作为dict键或set项使用),结果必须与<code>__eq__</code>一致。一个对象的散列值必须与它所等于的对象相同(根据它的<code>__eq__</code>或<code>__cmp__</code>)。一个对象的散列值可能与它不相等的对象不同,但不一定非得如此。这些要求还意味着在对象的生存期内,<code>__eq__</code>的结果不能更改,这就是为什么可变对象通常不能用作dict键。在</p>
<p>如果您的<code>__hash__</code>和<code>__eq__</code>不匹配,Python将无法在dicts和set中找到该对象,但它仍然会出现在<code>dict.keys()</code>和{<cd17>}中,这就是您在这里描述的。实现<code>__hash__</code>方法的通常方法是返回<code>__eq__</code>或<code>__cmp__</code>方法中使用的任何属性的<code>hash()</code>。在</p>