Рассмотрим следующую простую конструкцию односвязного списка. Предположим, что я хочу сохранить резервную копию головы и после внесения изменений в список вернуться обратно к голове. Я подумал, что мне нужно будет сделать copy()
или deepcopy()
, чтобы получить точную копию головы, прежде чем менять ее (см. Также здесь и здесь ). Однако, похоже, что это не так, и я могу сделать это простым заданием =
. Я не могу объяснить это поведение и почему оно работает. Можете ли вы предоставить какие-либо источники, которые помогут мне понять это?
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Class:
def foo(self, head: ListNode):
headCpy = head
print(id(head))
print(head.val)
print(id(headCpy))
print(headCpy.val)
head = head.next
print(id(head))
print(head.val)
print(id(headCpy))
print(headCpy.val)
if __name__ == '__main__':
n1 = ListNode(1)
n2 = ListNode(2)
n3 = ListNode(3)
n1.next = n2
n2.next = n3
Class().foo(n1)
Следующее имеет ту же проблему
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
n1 = ListNode(1)
n2 = ListNode(2)
n3 = ListNode(3)
n1.next = n2
n2.next = n3
n1backup = n1
n1 = n1.next
print(n1backup.val)
print(n1.val)