作业是never被束缚。
赋值首先计算右侧表达式,then将结果从左到右逐一分配给左侧目标。
See the 赋值语句文档 http://docs.python.org/2/reference/simple_stmts.html#assignment-statements:
赋值语句计算表达式列表(请记住,这可以是单个表达式或逗号分隔的列表,后者生成一个元组),并将单个结果对象从左到右分配给每个目标列表。
所以你的代码:
self.tail = self.tail.next = Element(element, None)
有效地意味着:
result = Element(element, None)
self.tail = result
self.tail.next = result
您可以使用它,只需颠倒分配顺序即可:
self.tail.next = self.tail = Element(element, None)
以正确的顺序分配:
result = Element(element, None)
self.tail.next = result
self.tail = result
这会导致链表的正确行为:
>>> head = tail = Element(0, None)
>>> tail.next = tail = Element(1, None)
>>> head.value
0
>>> head.next
<__main__.Element object at 0x10262e510>
>>> head.next.value
1
>>> tail is head.next
True
>>> tail.next = tail = Element(2, None)
>>> tail is head.next.next
True