这里发生的是一个列表在循环过程中发生了变异。
让我们考虑以下代码片段:
a = [0, 1, 2, 3]for a[-1] in a: print a
输出为:
[0, 1, 2, 0][0, 1, 2, 1][0, 1, 2, 2][0, 1, 2, 2]
每次迭代:
- 从内部指针当前指向的位置读取值
- 立即将其分配给列表中的最后一个元素
- 在最后一个元素打印在标准输出上之后
就像这样:
- 内部指针指向第一个元素,为0,最后一个元素被该值覆盖;清单是
[0, 1, 2, 0]
; 印刷价值是0
- 内部指针指向第二个元素,即1,最后一个元素被该值覆盖;清单是
[0, 1, 2, 1]
; 印刷价值是1
- (…)
- 在最后一步,内部指针指向最后一个元素;last元素被其自身覆盖-列表在上一次迭代时不会更改;打印的元素也不会改变。



