第五篇python进阶之深浅拷贝

一、引言

1.1可变 和不可变

id不变 值可以变 即为可变数据类型;值变id也变,即为不可变数据类型

  1. age = 19
  2. print(f'first:{id(age)}')
  3. age = 20
  4. print(f'second:{id(age)}')
  1. first:4384901776
  2. second:4384901808

二、拷贝(只针对可变数据类型)

如果l2是l1的拷贝对象,则l1内的任何数据类型的元素发生变化,l2内部也会相应的改变

  1. l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
  2. l2 = l1
  3. l1.append('g')
  4. print(l1)
  1. ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
  1. print(l2)
  1. ['a', 'b', 'c', ['d', 'e', 'f'], 'g']

个人觉得l1和l2共享着同一个列表,所以l1和l2不管谁修改了列表,都会改变列表的值

三、浅拷贝

如果l2是l1的拷贝对象,则l1内部的不可变数据类型的元素变化,则l2内部的元素不会改变;l1的可变元素发生变化,则l2对应的可变元素也跟着改变

  1. import copy
  2. l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
  3. l2 = copy.copy(l1)
  4. l1.append('g')
  5. print(l1)
  1. ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
  2. print(l2)
  1. ['a', 'b', 'c', ['d', 'e', 'f']]
  1. l1[3].append('g')
  2. print(l1)
  1. ['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
  1. print(l2)
  1. ['a', 'b', 'c', ['d', 'e', 'f', 'g']]

个人觉得l1和l2可变元素是共享的,不可变元素是完全隔离的

四、深拷贝

如果l2是l1的深拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化。

  1. import copy
  2. l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
  3. l2 = copy.deepcopy(l1)
  4. l1.append('g')
  5. print(l1)
  1. ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
  2. print(l2)
  1. ['a', 'b', 'c', ['d', 'e', 'f']]
  2. l1[3].append('g')
  3. print(l1)
  1. ['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
  2. print(l2)
  1. ['a', 'b', 'c', ['d', 'e', 'f']]

第五篇python进阶之深浅拷贝的更多相关文章

  1. 第五篇.python进阶

    目录 第五篇.python进阶 1. 异常处理 2. 数字类型内置方法 2.定义: 3.常用操作+内置方法: 4.存一个值or多个值: 5.有序or无序: 6.可变和不可变 1.用途: 2.定义: 3 ...

  2. 第二篇 python进阶

    目录 第二篇 python进阶 一 数字类型内置方法 二 字符串类型内置方法 三 列表类型内置方法(list) 四 元组类型内置方法(tuple) 五 字典内置方法 六 集合类型内置方法(self) ...

  3. 天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝

    Python中的深浅拷贝 在讲深浅拷贝之前,我们先重温一下 is 和==的区别. 在判断对象是否相等比较的时候我们可以用is 和 == is:比较两个对象的引用是否相同,即 它们的id 是否一样 == ...

  4. Python 中的深浅拷贝

    Python 中的深浅拷贝 参考文献:https://blog.csdn.net/lnotime/article/details/81194633 参考文献:https://blog.csdn.net ...

  5. python——赋值与深浅拷贝

    初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...

  6. Python中的深浅拷贝

    1.什么是深浅拷贝? python中一切皆对象,python中的数字.字符串.元组等,如果存放在了内存中,这部分内存里面的内容是不会改变的,但是也有情况,内存中存放了可变对象,比如说列表和字典,他们的 ...

  7. python基础(6)-深浅拷贝

    赋值 字符串和数字 # id()函数可以获取变量在内存中的地址标识 num1 = 2; num2 = 2; print(id(num1)) # result:8791124202560 print(i ...

  8. Python学习(006)-深浅拷贝及集合

     深浅拷贝 import copy husband=['xiaoxin',123,[200000,100000]] wife=husband.copy() #浅拷贝 wife[0]='xiaohong ...

  9. Python基础【3】:Python中的深浅拷贝解析

    深浅拷贝 在研究Python的深浅拷贝区别前需要先弄清楚以下的一些基础概念: 变量--引用--对象(可变对象,不可变对象) 切片(序列化对象)--拷贝(深拷贝,浅拷贝) 我是铺垫~ 一.[变量--引用 ...

随机推荐

  1. Fluent Ribbon Control Suite和AvalonDock 控件库

    Fluent Ribbon Control Suite 是一个Ribbon控件,可以用来创建Office 2010 样式的用户界面,支持MVVM,最近快要更新了,将会有Office 2013 样式的主 ...

  2. springboot自定义filter获取spring容器bean对象

    今天在自己定义的filter中,想要直接注入spring容器的其它bean进行操作,发现不能正常的注入: 原因:web容器加载顺序导致, 加载顺序是listener——filter——servlet, ...

  3. jmeter之吞吐量控制器

    比如说有一种场景是,10个并发里,有2个事操作业务A,有8个是操作业务B,要模拟这种业务场景,则可以通过吞吐量控制器来模拟 目录 1.用法 2.举例 1.用法 第一种:设置比例控制 选择percent ...

  4. docker命令小结

    文档:docker命令小结.note链接:http://note.youdao.com/noteshare?id=54015b76db9ae764182cb921e348b7fc&sub=DD ...

  5. How to remove duplicate lines in a large text file?

    How would you remove duplicate lines from a file that is  much too large to fit in memory? The dupli ...

  6. 使用Visual Studio Code Coverage和nunit上传单元测试覆盖率和单元测试结果到SonarQube上

    SonarQube.Scanner.MSBuild.exe begin /k:"OMDCCQuotes" /d:sonar.host.url="http://myip:9 ...

  7. 根据文本内容确定UILabel的高度

    NSString *str = @"严重依赖中国的美国公司包括苹果.百胜餐饮集团都感受到了近期人民币贬值带来的痛.这直接导致了苹果股价下跌了5.2%,拥有肯德基.必胜客的百胜也下跌了4.9% ...

  8. 了解DrawCall

    一.什么是DrawCall DrawCall的含义就是CPU调用图像编程接口,以命令GPU进行渲染的操作. CPU和GPU通过使用一个命令缓冲区实现并行工作.命令缓冲区包含一个命令队列,CPU向其中添 ...

  9. 今天发现一个Window系统服务增删改查神器:NSSM

    官网地址:https://nssm.cc Win10系统下这个:https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip 官方的帮助,英语的,可以大概看一下: htt ...

  10. PHP学习(3)——数据的存储与检索

    要点目录: I.保存数据 II.打开文件   III.创建并写入文件 IV.关闭文件 V.读文件 VI.给文件加锁 VII.删除文件 VIII.其他有用的文件操作函数 IX.数据库管理系统 1.保存数 ...