首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python的诡异有关问题.

2012-02-21 
python的诡异问题......Python codea[1,2,3,4]tmp[]i0for x in a:tmp[:][]tmp.append(a[i]+1)tmp.appe

python的诡异问题......

Python code
a=[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的一个很容易出错的陷阱了,列表要用深拷贝来做

热点排行