为何Python代码片段未输出1->2->3?关于求值顺序的疑问
问题原因解析
核心原因是Python的多重赋值规则:先完整计算右侧所有表达式的值,再按从左到右的顺序依次赋值给左侧的目标。
我们一步步拆解关键代码A.next, A = B, A的执行过程:
- 计算右侧值:先获取
B(指向4->5->6的节点)和当前的A(指向1->2->3的节点),得到元组(B, 原A)。此时两个值都被临时保存,后续不管左侧怎么操作,这两个值不会变。 - 赋值第一个左侧目标
A.next:此时A还没被重新赋值,仍然指向原来的1节点。所以把B赋值给这个1节点的next属性——也就是原来1节点的next从指向2节点,改成了指向4节点。 - 赋值第二个左侧目标
A:把之前保存的原A(也就是那个1节点)赋值给变量A,所以A最终还是指向1节点。 - 执行
A.print():从1节点开始遍历,它的next已经是4节点,所以输出顺序就是1->4->5->6。
如果想要让A.print()输出1->2->3,直接去掉A.next, A = B, A这行代码即可;如果你的意图是让变量A指向B的链表,直接写A = B就行,此时会输出4->5->6。
内容的提问来源于stack exchange,提问作者Robert Lipton
相关产品推荐
相关产品推荐

