Python中引用复制、分片复制、完整复制
首先直接看例子:
>>> l1=[1,2,3]
>>> l11 = l1
>>> l2=[4,5,l1]
>>> l2
[4, 5, [1, 2, 3]]
>>> l3 = l2[:]
>>> l3
[4, 5, [1, 2, 3]]
>>> import copy
>>> l4 = copy.deepcopy(l2)
>>> l4
[4, 5, [1, 2, 3]]
>>> l2[1] = 6
>>> l2
[4, 6, [1, 2, 3]]
>>> l3
[4, 5, [1, 2, 3]]
>>> l4
[4, 5, [1, 2, 3]]
>>> l1[0] = 7
>>> l1
[7, 2, 3]
>>> l11
[7, 2, 3]
>>> l2
[4, 6, [7, 2, 3]]
>>> l3
[4, 5, [7, 2, 3]]
>>> l4
[4, 5, [1, 2, 3]]
说明:
- 使用共享对象应用的方式来复制,只会给现存的对象添加一个新的引用,并不会在内存中生成新的对象(看l11和l1的对比)。
- 使用分片的方法来复制列表等序列类型,只会复制当前序列的内容,不会复制序列内的数据结构(看l1、l2、l3的对比)。
- 字典拥有copy方法也可以进行复制,不过局限性同2。
- copy标准模板库能够生成完整的拷贝,消除上一条中不能复制序列内数据结构的问题(看l3和l4值的对比)。
- 2和3叫做顶层复制,无法复制嵌套的数据结构。
时间: 2024-10-18 19:57:33