首页 > 解决方案 > python3 a==c,b==d,a==b,但是c不等于d,请帮我理解为什么

问题描述

我创建了一个可以反转链表顺序的递归函数。例如,如果一个链表最初是 [3,2,1],则该函数将返回 [1,2,3]。

下面是代码:

class node:
   def __init__(self,val,next=None):
      self.val=val
      self.next=next  

def recursive(l3):
    if l3.next is None:
        return l3
    else:
        a=l3           
        head=recursive(l3.next)
        b=head       
        while b.next is not None:
            b=b.next
        b.next=a
        b.next.next=None
        return head

现在我有一个链表a

a=node(1,node(2))

但是,当我尝试recursive(a)==recursive(a)它返回错误。当我本质上将一个与自身进行比较时,为什么两者不相等。你能帮我理解为什么这两者不是同一个变量吗?

谢谢

标签: python-3.xvariablesequality

解决方案


问题确实是可变性。您需要考虑recursive对您的链接列表有什么影响。除了返回一个“反向链表”之外,它还会改变原始链表。它发生在这里:

a=l3           
...
b.next=a
b.next.next=None

实际上,这与做l3.next = None.

不过,最重要的是,您构建的两个链表共享同一个节点 ,c并且它也通过调用而发生变异recursive(它next被重新分配)。

确实,在调用之后recursive(a)您可以看到它c.next指向node(2)而不是None. 调用后recursive(b) c.next指向node(4)改为。

出于这个原因,如果您调用它 on or ,recursive返回,但如果您调用它 on然后on ,它会返回and then 。node(1)a babnode(1)node(2)


编辑:您将问题更改为仅使用一个变量,这使其更加明显:问题是每次调用都会改变参数。


推荐阅读