<p>这里有一个可能的解决方案。你知道吗</p>
<pre><code>class Uniquifier(object) :
"""
This class accepts an immutable object and returns a "canonical" instance of it, if one exists, or keeps it in store as that canonical instance. This is used as a kind of clunky multiton implementation.
Of course instances are not destroyed until this object is destroyed.
"""
def __init__(self):
self._universe = {}
def uniquify(self, item):
try :
return self._universe[item]
except KeyError :
self._universe[item] = item
return self._universe[item]
</code></pre>
<p>运行此:</p>
<pre><code>a = frozenset([3,5])
b = frozenset([5,3])
c = frozenset([3]).union([5])
print a==b, b==c
print a is b, b is c, a is c
</code></pre>
<p>结果:</p>
<pre><code>True True
False False False
</code></pre>
<p>但是这个:</p>
<pre><code>universe = Uniquifier()
a = universe.uniquify(frozenset([3,5]))
b = universe.uniquify(frozenset([5,3]))
c = universe.uniquify(frozenset([3]).union([5]))
print a == b, b==c
print a is b, b is c, a is c
</code></pre>
<p>给予</p>
<pre><code>True True
True True True
</code></pre>
<p>根据需要。你知道吗</p>
<p>我本来希望使用一些Python的魔法可以隐藏“引擎盖下”的简单逻辑,但我猜这有一个直接和透明的优势。你知道吗</p>