我正在Python3中实现一个LinkedList。该程序将“ current_node”分配给“ previous_node”,然后将“ current_node”更改为“ current_node.next”。我希望此更改也适用于“ previous_node”,但不会适用。
class ListNode(object):
def __init__(self, val):
self.val = val
self.next = None
a = [7, 8, 11, 3]
fst_node, sec_node, thd_node, frt_node = ListNode(a[0]), ListNode(a[1]), ListNode(a[2]), ListNode(a[3])
fst_node.next = sec_node
sec_node.next = thd_node
thd_node.next = frt_node
current_node = sec_node
previous_node = current_node
print(previous_node, current_node)
current_node = current_node.next
print(previous_node, current_node)
答案 0 :(得分:0)
current_node = sec_node
previous_node = current_node # current_node points to the same object as previous_node
print(previous_node, current_node)
current_node = current_node.next # changes where current_node points to
print(previous_node, current_node)
您是否注意到previous_node
没有在此处重新分配?只有current_node
是。这仍然是按引用传递的,您只是在更改current_node
的引用,而将precious_node
保留下来。
答案 1 :(得分:0)
引用(变量)和对象本身不是同一件事。
您可以更改变量以指向另一个对象,但不会更改该对象。
objRef = someObject
anotherObjRef = objRef
objRef = anotherObject
# anotherObjRef will still point to someObject!
但是,如果您修改对象中的某些内容(通过引用),则该对象将被修改,因此您将在所有引用中看到新值:
objRef = someObject
anotherObjRef = objRef
objRef.someData = something
# anotherObjRef.someData is something!