Python 3.x python3a==c,b==d,a==b,但是c不等于d,请帮助我理解为什么
我创建了一个递归函数,可以反转链表的顺序。例如,如果链接列表最初是[3,2,1],则函数将返回[1,2,3] 代码如下:Python 3.x python3a==c,b==d,a==b,但是c不等于d,请帮助我理解为什么,python-3.x,variables,equality,Python 3.x,Variables,Equality,我创建了一个递归函数,可以反转链表的顺序。例如,如果链接列表最初是[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
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))
然而,当我尝试递归(a)=递归(a)时,它返回false。当我本质上比较一个和它自己的时候,这两个为什么不相等呢。你能帮我理解为什么这两个变量不一样吗
谢谢问题的确是易变性。你需要考虑<代码>递归< /代码>对你的链表的影响。除了返回“反向链表”外,它还对原始链表进行了变异。它发生在这里,例如:
a=l3
...
b.next=a
b.next.next=None
实际上,这与执行l3.next=None
相同
但是,最重要的是,您构建的两个链表共享同一个节点,c
,并且通过调用recursive
(它的next
被重新分配)对其进行变异
实际上,在调用recursive(a)
之后,您可以看到c.next
指向节点(2)
,而不是None
。调用递归(b)
c后,next
指向节点(4)
因此,如果在a
或b
上调用它,recursive
返回节点(1)
,但如果在a
上调用它,然后在b
上调用它,它返回节点(1)
,然后返回节点(2)
编辑:您将问题更改为仅使用一个变量,这使得问题变得更加明显:问题在于每次调用都会改变参数。这不是一个;请提供一个。否则,就没有办法告诉您的
节点
类是如何实现的,它可能会隐藏所有形式的错误。如果这不是由可变状态引起的,那么这个问题可以总结为:相等不是可传递的(标识是可传递的)。这意味着如果a==b和b==c,这并不一定意味着a==c。@ShadowRanger我已经为node类提供了代码,希望它能帮助更好地理解我的整体代码