【发布时间】:2019-09-10 15:55:23
【问题描述】:
我有如下结构的链表。
class Node:
def __init__(self,val):
self.val = val
self.next = None
n1 = Node(1)
n2 = Node(2)
n3 = Node(3)
n4 = Node(4)
n1.next = n2
n2.next = n3
n3.next = n4
最后一个节点的 next 是 None ,但是当更新它时,它确实反映在链表中。
a = n4.next
a = Node(5)
print(n4.next)
>> None
但是当我直接更新(没有临时变量)时,它可以工作
n4.next = Node(5)
print(n4.next)
>> <<Node Object>>
为什么会这样?我认为 None 也是 python 中的对象,对象分配只是复制引用。
【问题讨论】:
-
你想做什么?你设置 self.next 等于 none,这很好。它返回很好,然后你使它等于一个对象?为什么?
n4.next = Node(5) print(n4.next.next)returns 也没有 -
None是一个单身人士。只有一个 None 对象,因此更改该对象的身份会破坏...嗯,几乎一切。很高兴口译员不让你这样做。 -
无论如何,
a = Node(5)正在用新值替换分配给a的旧值;它不修改该引用的先前对象(a曾经指向的东西);相反,它只会使a指向不同的东西,而使旧的指向对象完全未修改(尽管引用计数较低,并且如果引用计数现在为 0,则会进行垃圾回收)。
标签: python python-3.x linked-list nonetype