我正在努力理解类的指针是如何工作的。假设我们有一个链表中的节点:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
然后,如果我们创建一个指向x
的指针,并创建另一个节点y
并将其赋值给x.next
,我们就能在指针中保存x.val
的值,并且将y
赋值给.next
属性:
x = ListNode(3)
headNode = x
y = ListNode(4)
x.next = y
print(f'ID of y: {id(y)}')
print(f'Current x.next:\n\t.val: {x.next.val}\t.next:{x.next.next},\ncurrent headNode.next.next: {headNode.next.next}\n')
这段代码会输出:
ID of y: 2656509108560
Current x.next:
.val: 4 .next:None,
current headNode.next.next: None
现在,如果我们再次执行相同的操作,用y
替换x
的属性,指针会自动在.next
属性的.next
中添加另一个节点:
x = y
y = ListNode(4)
x.next = y
print(f'ID of y: {id(y)}')
print(f'Current x.next:\n\t.val:{x.next.val}\t.next:{x.next.next},\ncurrent headNode.next.next: {headNode.next.next.val}\n')
x = y
print(f'Cached list: [{headNode.val}] -> [{headNode.next.val}] -> [{headNode.next.next.val}]')
这将输出:
ID of y: 2656507051616
Current x.next:
.val:4 .next:None,
current headNode.next.next: 4
Cached list: [3] -> [4] -> [4]
我想知道这种行为(指针headNode
中的next.next
属性从None
自动填充为另一个ListNode
)是否是由于Python自动理解它指向的是不同实例(id(y)
不同),因此找到类中可以寻址的另一个.next
指针。我非常希望有人能帮助我理解这一点。提前感谢您的帮助。