反转具有多个分配的链表 - 并非所有分配顺序都有效?
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
。
与
但如果你尝试:
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
。