繁体   English   中英

python循环一个链表,为什么原来的head没有改变?

[英]Python loop a linked list, why is the original head not changed?

我试图理解 Python 的传递参数的方式。 我知道 Python 不同于 C++ 和其他语言。 它是通过对象引用传递的。

我尝试使用这些代码:

class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None

node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
node5 = ListNode(5)

node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5


def testWithPointers1(head):
    head.next = None   

如果我做 testWithPointers1(node1)

那么 node1.next 将是 None

def testWithPointers2(head):
    cur = head
    cur.next = None

如果我做 testWithPointers1(node1)

那么 node1.next 将是 None

def printLinkedList(head):
    while head:
        print(head.val)
        head = head.next

但是为什么这段代码,在调用printLinkedList(node1) 之后,它不会改变node1 的值?

它不会更改node1值,因为您所做的只是更改节点的本地副本。 在每个例程中, head是一个局部变量,指向你传入的节点。它不是node1的别名; 它只是对节点的另一个引用。

当您更改节点的字段时,您指向的是节点所在的实际内存位置,因此当您通过node1引用相同位置时,您会看到这些更改。 但是,更改head的值不会更改node1引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM