[英]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.