Python 中list赋值引用

来源:互联网 发布:数字矩阵切换器类型 编辑:程序博客网 时间:2024/06/14 06:09

开发过程中发现(其实是被坑了,import了一个list并赋值给当前的局部变量,由于我不需要首元素,然后就del()掉,结果影响了其它模块),python中list赋值并不是拷贝,而是指针或者引用,看了些文章,发现是引用,底层实现没有去看,应该是C的指针吧

>>> la = [1, 2]>>> lb = la>>> lc = []>>> lc = la>>> ld = la[:]>>> la, lb, lc, ld([1, 2], [1, 2], [1, 2], [1, 2])>>> lb[0] = 'b'>>> la, lb, lc, ld(['b', 2], ['b', 2], ['b', 2], [1, 2])>>> lc[0] = 'c'>>> la, lb, lc, ld(['c', 2], ['c', 2], ['c', 2], [1, 2])>>> id(la)4341415808>>> id(la), id(lb), id(lc), id(ld)(4341415808, 4341415808, 4341415808, 4341470128)>>> le = la[1:]>>> la, lb, lc, ld, le(['c', 2], ['c', 2], ['c', 2], [1, 2], [2])>>> le[0] = 'e'>>> la, lb, lc, ld, le(['c', 2], ['c', 2], ['c', 2], [1, 2], ['e'])>>> id(la), id(lb), id(lc), id(ld), id(le)(4341415808, 4341415808, 4341415808, 4341470128, 4341566064)
可以看到lb[0] lc[0]都修改了la[0]的值

id[0] 没有发生变化, le[0]的修改只影响了自己的值

通过id()可以看到la lb lc的地址是一样的,ld le是新的不同的地址

这也可以看到如果想要变量是拷贝的可以用[:]来拷贝全部或部分元素

参考:

http://www.cnblogs.com/yuyan/archive/2012/04/21/2461673.html

http://www.douban.com/note/226827597/



0 0
原创粉丝点击