擅长:python、mysql、java
<p>可以使用<a href="https://docs.python.org/3/library/stdtypes.html#frozenset" rel="nofollow noreferrer">^{<cd1>}</a>代替元组:</p>
<pre><code>>>> hash(frozenset([1, 2, 'a', 'b']))
1190978740469805404
>>>
>>> hash(frozenset([1, 'a', 2, 'b']))
1190978740469805404
>>>
>>> hash(frozenset(['a', 2, 'b', 1]))
1190978740469805404
</code></pre>
<p>但是,从iterable中删除重复项会带来一个微妙的问题:</p>
^{pr2}$
<hr/>
<p>可以通过使用<a href="https://docs.python.org/3/library/collections.html#collections.Counter" rel="nofollow noreferrer">^{<cd2>}</a>从iterable创建一个计数器,并对计数器的项调用<code>frozenset</code>,从而保留原始iterable中每个项的计数:</p>
<pre><code>>>> from collections import Counter
>>>
>>> hash(frozenset(Counter([1,2,1]).items()))
-307001354391131208
>>> hash(frozenset(Counter([1,1,2]).items()))
-307001354391131208
>>>
>>> hash(frozenset(Counter([1,2,1]).items())) == hash(frozenset(Counter([1,2,2]).items()))
False
</code></pre>