我试图理解Python的pass参数的方式。我知道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的值?
答案 0 :(得分:1)
它不会更改 node1 值,因为您所做的只是更改节点的本地副本。在每个例程中, head 是一个指向您传入的节点的局部变量。它不是 node1 的别名;它只是对节点的另一个引用。
当您更改节点的字段时,您指向节点所在的实际内存位置,因此当您通过 node1 引用相同位置时,您会看到这些更改。但是,更改 head 的值不会更改 node1 引用。