Python中引用复制、分片复制、完整复制

本文通过实例详细解析了Python中列表的引用复制、分片复制及完整复制的区别与应用场景。介绍了不同复制方式对列表及其内部对象的影响,特别是对于嵌套列表的处理差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]]

说明:

  1. 使用共享对象应用的方式来复制,只会给现存的对象添加一个新的引用,并不会在内存中生成新的对象(看l11和l1的对比)。
  2. 使用分片的方法来复制列表等序列类型,只会复制当前序列的内容,不会复制序列内的数据结构(看l1、l2、l3的对比)。
  3. 字典拥有copy方法也可以进行复制,不过局限性同2。
  4. copy标准模板库能够生成完整的拷贝,消除上一条中不能复制序列内数据结构的问题(看l3和l4值的对比)。
  5. 2和3叫做顶层复制,无法复制嵌套的数据结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值