擅长:python、mysql、java
<p>这个问题与<code>s1</code>和<code>s2</code>之间的循环引用有关。在</p>
<p>这使得无法将<code>s1</code>与{<cd2>}进行比较(就<code>cmp()</code>而言,这两个词典具有无限的深度)。考虑以下因素:</p>
<pre><code>print s1 == s1 # immediately returns True, probably due to equal object ids
print s1 == s2 # RuntimeError: maximum recursion depth exceeded in cmp
</code></pre>
<p>这解释了<code>s1 in fsm["accepting"]</code>起作用,<code>s2 in fsm["accepting"]</code>中断的原因。在</p>
<p>解决这个问题的一个简单方法是更换</p>
^{pr2}$
<p>与</p>
<pre><code>return id(current) in map(id, fsm["accepting"])
</code></pre>
<p>这将通过标识比较状态,而不是尝试按值比较两个无限深的字典。在</p>