Допустим, у меня есть следующие имена и объекты
original = n = <original_object>
n = n.next = <new_object>
После запуска вышеупомянутого я бы ожидал увидеть original
, указывающий на <original_object>
, но это не так.
Однако, если я вместо этого сделаю:
original = n = <original_object>
n.next = <new_object> # Attribute of the object class
n = n.next
, тогда я вижу original
, указывающий на <original_object>
(или, по крайней мере, это то, что, я думаю, я вижу).
Конкретный пример
Я проиллюстрирую это связанным списком в Python 3.8:
class Node:
def __init__(self, arg1):
self.next = None
С цепочечными присвоениями:
head = n = Node(None)
n = n.next = Node(None)
print(head.next) # None (the "head" is gone?)
С последовательными назначениями:
head = n = Node(None)
n.next = Node(None) # *
n = n.next # *
print(head.next) # <__main__.Node object at 0x7fa4e0610ca0>
Мое намерение здесь состоит в том, чтобы сохранить "заголовок" связанного списка, так как я добавляю узлы в хвост. Почему я получаю разные результаты с цепочкой от последовательных заданий?