擅长:python、mysql、java
<p>如果我正确地理解了这个问题,python比较内存位置的默认值是他正在寻找的行为,但是没有得到。这里有一个工作示例,其中定义了一个自定义类<code>Node</code>,它表明不需要<code>__eq__(self, other)</code>。</p>
<pre><code>class Node(object):
pass
open_node_list = []
node_list = []
for i in range(10):
a_node = Node()
open_node_list.append(a_node)
node_list.append(a_node)
removed = open_node_list.pop()
node_list.remove(removed)
</code></pre>
<p>我不能确定,因为您没有显示您的<code>open_node_list</code>和<code>node_list</code>的定义位置,但我怀疑列表本身引用同一个列表对象。如果是这样的话,来自<code>open_node_list</code>的弹出也来自<code>node_list</code>,因此当您调用<code>remove</code>时,节点将不再存在。这里有一个例子,其中<code>node_list</code>和<code>open_node_list</code>实际上是相同的列表,因此对其中一个的更改会影响另一个:</p>
<pre><code>class Node(object):
pass
open_node_list = []
node_list = open_node_list # <-- This is a reference, not a copy.
open_node_list.append(Node())
print(node_list)
</code></pre>
<p>复制列表的一种方法是:</p>
<pre><code>node_list = open_node_list[:]
</code></pre>