python的诡异问题......Python codea[1,2,3,4]tmp[]i0for x in a:tmp[:][]tmp.append(a[i]+1)tmp.appe
python的诡异问题......
Python codea=[1,2,3,4]tmp=[]i=0for x in a: tmp[:]=[] tmp.append(a[i]+1) tmp.append("a") a[i]=tmp i=i+1print(tmp)print(a)
运行结果是a是[[5, 'a'], [5, 'a'], [5, 'a'], [5, 'a']],为什么不是[[2, 'a'], [3, 'a'], [4, 'a'], [5, 'a']]
[解决办法]因为a[i]=tmp指向同一内存地址
a[i]=tmp[:]这样才会拷贝数据
[解决办法]因为python是引用传递的,你列表a[i]=tmp实际是存了tmp的地址而已
所以你最后的a列表变成[tmp,tmp,tmp,tmp]
而tmp值在循环执行完,最后被改成了[5, 'a']
这是python的一个很容易出错的陷阱了,列表要用深拷贝来做