文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

图解Python中深浅拷贝(copy)

2024-12-03 16:42

关注

在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题。为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用。为了生成这个副本,就产生了拷贝。今天就说一下Python中的深浅拷贝问题。

一、深浅copy

    1.  赋值运算 

  1. l1 = [1, 2, 3, [22, 33]]  
  2. l2 = l1  
  3. l1.append(666)  
  4. print(l1)  # [1, 2, 3, [22, 33], 666]  
  5. print(l2)  # [1, 2, 3, [22, 33], 666] 

图解:

注意:l2 = l1是一个指向,是赋值,和深浅copy无关。

    2.  浅copy

其实列表是一个一个的槽位,每个槽位存储的是该对象的内存地址 

  1. #例1. 给大列表添加元素  
  2. l1 = [1, 2, 3, [22, 33]]  
  3. l2 = l1.copy()  
  4. # 或者下面这种方式,也是浅copy  
  5. # import copy  
  6. l2 = copy.copy(l1)  
  7. l1.append(666) 
  8. print(l1)  # [1, 2, 3, [22, 33], 666]  
  9. print(l2)  # [1, 2, 3, [22, 33]]  
  10. #例2. 给小列表添加元素  
  11. l1 = [1, 2, 3, [22, 33]]  
  12. l2 = l1.copy()  
  13. l1[-1].append(666)  
  14. print(l1)  # [1, 2, 3, [22, 33, 666]]  
  15. print(l2)  # [1, 2, 3, [22, 33, 666]]、  
  16. 例3. 将l1列表中第一个元素改为6  
  17. l1 = [1, 2, 3, [22, 33]] 
  18. l2 = l1.copy()  
  19. l1[0] = 6  
  20. print(l1)  # [6, 2, 3, [22, 33]]  
  21. print(l2)  # [1, 2, 3, [22, 33]] 

图解:

例1

例2

例3

小结:

浅copy:会在内存中新开辟一个空间,存放这个copy的列表,但是列表里面的内容还是沿用之前对象的内存地址。

    3.  深copy 

  1. import copy  
  2. l1 = [1, 2, 3, [22, 33]]  
  3. l2 = copy.deepcopy(l1)  
  4. l1.append(666)  
  5. print(l1)  # [1, 2, 3, [22, 33], 666]  
  6. print(l2)  # [1, 2, 3, [22, 33]] 

图解:

本质如下图:

但是python对深copy做了一个优化,将可变的数据类型在内存中重新创建一份,而不可变的数据类型则沿用之前的,所以内存中是下面这样的:

小结:

深copy:会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变数据类型则沿用之前的。

为什么Python默认的拷贝方式是浅拷贝?

总结:

 

来源:马哥Linux运维内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯