python列表复制(浅拷贝and深拷贝)

来源:互联网 发布:乐乎网络电话 编辑:程序博客网 时间:2024/06/05 15:06
1》
>>> l=[1,2,3,4]
>>> l1=l
>>> l
[1, 2, 3, 4]
>>> l1
[1, 2, 3, 4]
>>> id(l)
140565035576856
>>> id(l1)
140565035576856
这种做法是将l中的地址赋给了l1,并未真正生成一个新的列表,l1和l指向的是同一个列表。
如果对l或l1的元素进行修改,列表l和l1会同时发生变化。
>>> l.append(9)
>>> l
[1, 2, 3, 4, 9]
>>> l1
[1, 2, 3, 4, 9]
下图显示了上述变化:


2》
>>> l
[1, 2, 3]
>>> l1=l[:]#浅拷贝
>>> l
[1, 2, 3]
>>> l1
[1, 2, 3]
>>> id(l)
140565035576784
>>> id(l1)
140565035497736
>>> id(l[0])
30695768
>>> id(l1[0])
30695768
>>> l[0]=99
>>> l
[99, 2, 3]
>>> l1
[1, 2, 3]
上述代码可用下图来解释:


3》
>>> l=[1,2,[4,5]]
>>> l1=l[:]
>>> l
[1, 2, [4, 5]]
>>> l1
[1, 2, [4, 5]]
>>> len(l)
3
>>> l[2]
[4, 5]
>>> l[2].append(8)
>>> l
[1, 2, [4, 5, 8]]
>>> l1
[1, 2, [4, 5, 8]]
上述代码可用下图解释:


4》
>>> import copy
>>> l
[1, 2, [4, 5, 8]]
>>> l1=copy.copy(l)#浅拷贝
>>> l
[1, 2, [4, 5, 8]]
>>> l1
[1, 2, [4, 5, 8]]
>>> l[2].pop()
8
>>> l
[1, 2, [4, 5]]
>>> l1
[1, 2, [4, 5]]
copy.copy(l)与l[:]都是浅拷贝,功能一样,此处就不画图了。

5》
>>> import copy
>>> l=[2,3,[4,5]]
>>> l1=copy.deepcopy(l)#深拷贝
>>> l
[2, 3, [4, 5]]
>>> l1
[2, 3, [4, 5]]
>>> l[2].append(9)
>>> l
[2, 3, [4, 5, 9]]
>>> l1
[2, 3, [4, 5]]

上述代码可用下图解释:


本文中的图片解释是个人理解,如有错误,请指出。

(完)


1 0
原创粉丝点击