Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python3a==c,b==d,a==b,但是c不等于d,请帮助我理解为什么_Python 3.x_Variables_Equality - Fatal编程技术网

Python 3.x python3a==c,b==d,a==b,但是c不等于d,请帮助我理解为什么

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

我创建了一个递归函数,可以反转链表的顺序。例如,如果链接列表最初是[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))
然而,当我尝试递归(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类提供了代码,希望它能帮助更好地理解我的整体代码