反转具有多个分配的链表 - 并非所有分配顺序都有效?

reverse a linked list with multiple assignment - not all assignment orders work?

完全相同

但如果你尝试:

pre, node, node.next = node, node.next, pre

不行! (得到NoneType下一个没有属性)

两者:

pre, node.next, node = node, pre, node.next

node.next, pre, node = pre, node, node.next

工作。为什么第一个错了?我认为多重赋值让我无需考虑正确的顺序(或根本不需要考虑 :)


编辑:

我会缩小范围:

if node:
   node.next, node = None, node.next
   #node, node.next = node.next, None # comment the previous line and uncomment this - boom!

我一直以为这几行是等价的...

问题是您的接收变量之一执行基于分配值的间接寻址。多重赋值逻辑使您无需考虑右侧,因为它会自动为源值创建临时存储。但是,这不适用于作业的左侧。

因此,node 的分配顺序很重要,因为分配给 node.next