python list 交换赋值的问题
今天写程序的时候总是和自己预想的结果不一致,最终定位到这行代码。
情况如下:
先定义一个list
lis = [4,1,3,1,3,5,5]
设定 i = 0
那么这个语句之后 lis 会变成什么样
lis[i], lis[lis[i]] = lis[lis[i]], lis[i]
开始我以为 lis[i] = 4
所以 相当于 list[0], list[4] = list[4], list[0]
lis 会变成
[3, 1, 3, 1, 4, 5, 5]
但是!! 结果是这样
[3, 1, 3, 4, 3, 5, 5]
结果可以看出 lis[i] = lis[lis[i]] 这条成功赋值了
但是 lis[lis[i]] = lis[i] 这里有问题,应该是lis[i]此时已经变成可3 而不是原来的 4了,就是说
前面的赋值影响了它。
那么我们定义 temp = list[i]
lis[i], lis[temp] = lis[temp], lis[i]
结果回归正常。
所以猜测是 只有当运行到赋值的那条语句时才会计算 lis[i] 这个值,并且,左边的会比右边的先赋值,所以才能影响到。
未完待续。。。等我弄明白原理回来补充