擅长:python、mysql、java
<p>我想添加一个关于使用不安全散列的特别说明</p>
<p>通过设置compare=False或hash=False,可以排除通过哈希进行比较的字段。(默认情况下,哈希继承自比较)</p>
<p>如果您将节点存储在图形中,但希望在不中断散列的情况下标记已访问的节点(例如,如果它们位于未访问的节点集合中…),则这可能非常有用</p>
<pre class="lang-py prettyprint-override"><code>from dataclasses import dataclass, field
@dataclass(unsafe_hash=True)
class node:
x:int
visit_count: int = field(default=10, compare=False) # hash inherits compare setting. So valid.
# visit_count: int = field(default=False, hash=False) # also valid. Arguably easier to read, but can break some compare code.
# visit_count: int = False # if mutated, hashing breaks. (3* printed)
s = set()
n = node(1)
s.add(n)
if n in s: print("1* n in s")
n.visit_count = 11
if n in s:
print("2* n still in s")
else:
print("3* n is lost to the void because hashing broke.")
</code></pre>
<p>这花了我<em>几个小时</em>才弄明白。。。我找到的有用的进一步阅读资料是关于数据类的python文档。具体请参见字段文档和dataclass arg文档。
<a href="https://docs.python.org/3/library/dataclasses.html" rel="noreferrer">https://docs.python.org/3/library/dataclasses.html</a></p>