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] 这个值,并且,左边的会比右边的先赋值,所以才能影响到。

 

未完待续。。。等我弄明白原理回来补充

 

 

 

 

 

posted @ 2018-10-23 16:52  远途  阅读(3260)  评论(0编辑  收藏  举报