擅长:python、mysql、java
<p>好吧,这是因为<code>def purge(self)</code>中的以下一行:</p>
<pre><code> Colony.list = Colony.temp
</code></pre>
<p>第一次运行<code>purge()</code>,它使<code>Colony.list</code>和{<cd4>}都指向内存中的同一个数组。所以第二次运行<code>purge()</code>,你进入了一个无限循环,在这个循环中,<code>for number in Colony.list:</code>执行<code>Colony.temp.append("ant")</code>,这实际上也增加了{<cd3>},循环永远不会退出,因为它总是有一个新成员。在</p>
<p>在python中,<code>for</code>循环为给定对象创建迭代器(如果它还不是迭代器)。在每次迭代中,python都会调用迭代器的<code>next()</code>方法(在本例中为list)。如果<code>next()</code>不能产生一个新的值进行迭代,它将引发<code>StopIteration</code>,循环退出。别担心,这个异常是由<code>for</code>语句自动处理的。在您的例子中,<code>Colony.list.next()</code>总是会找到一个新值(因为您刚刚附加了它),并且永远不会到达末尾。在</p>
<p>要修复代码,请尝试切片。这意味着复制数组,而不是将两个名称指向同一个数组:</p>
^{pr2}$