读书人

python的诡异有关问题.

发布时间: 2012-02-21 16:26:23 作者: rapoo

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

读书人网 >perl python

热点推荐