问题
python交换两个变量的值很简单:
x, y = y, x
复制号右侧的元祖会首先计算内部的值,然后安装从左到右的顺序,依次赋值给赋值号右侧的变量。
有一种情况需要注意:
如图,交换下标为0的数字2和下标为2的数字4。返回的结果却不如我所愿,Why?
原因
首先赋值号右边的内容先计算,为元祖(4, 2),这一步没有错。之后(4,2)会依次赋值给左侧变量。
首先l[0] = 4,之后再赋值l[l[0]],这时l[0]已经被覆盖为4,故此处赋值的是l[4],也就是数字6的位置。
就是因为这个原因,出现了上述问题。
解决
古法换值
temp = l[0]
l[0] = l[temp]
l[temp] = temp
总结
出现这种问题的原因还是因为列表属于可变类型,l[l[0]]的下标l[0]会在运行过程中变化。