深浅拷贝

深浅拷贝的前提:  

  • 相等和相同的关系
  • 深浅拷贝针对的是列表等可变的数据类型。
  • 深浅拷贝在普通的列表没有什么意义,只有在嵌套列表,或其他嵌套数据类型才有意义。
 a = "aaa"
a1 = "aaa"
b = a
print(a == a1)
print(id(a),id(a1),id(b)) #都一样
print(a == b) c = [1,2,3]
c1 = [1,2,3]
d = c
print(c == c1)
print(id(c),id(c1),id(d)) #c1不一样
print(c == d)

字符串没有copy方法:

 # st = "aaa"
# st2 = st.copy() 会报错,str没有copy方法

普通列表拷贝就是生成一个新的列表,两者值形同,但id不同,且更改其中一个列表的值不影响另一列表的值:

 #普通列表拷贝
li = ["a",1,2]
li2 = li.copy()
print(li == li2) #True
print(li is li2) #False
print(id(li),id(li2)) #id不同
li[0] = 1
print(li) #li的改变不会更改li2的值,因为两者指的是不同的对象
print(li2)

嵌套列表浅拷贝,两者值相同,id不同,更改非嵌套的值不影响另一列表,更改嵌套列表的值会影响另一列表。

 li3 = [1,2,[3,4]]
li4 = li3.copy()
print(li3 == li4) #True
print(li3 is li4) #False
print(id(li3),id(li4)) #id不同 li3[0] = 3
print(li3) #更改非嵌套列表的元素,不会更改li4的值
print(li4) li3[2][0] = 2
print(li3) #修改嵌套列表的值,会改变li4的值
print(li4)

深拷贝嵌套列表,两者值相同,id不同,更改列表的值,都不会影响另一列表,即两者完全不相干。

 li5 = copy.deepcopy(li3)
li5[2][0] = 5
print(li5) #[1,2,[5,4]
print(li3) #[1,2,[3,4]]

Python 全栈开发十一 深浅拷贝的更多相关文章

  1. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  2. Python 全栈开发【第0篇】:目录

    Python 全栈开发[第0篇]:目录   第一阶段:Python 开发入门 Python 全栈开发[第一篇]:计算机原理&Linux系统入门 Python 全栈开发[第二篇]:Python基 ...

  3. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  4. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  5. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  6. Python全栈开发【基础四】

    Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...

  7. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  8. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  9. Python全栈开发【基础一】

    Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...

随机推荐

  1. POJ 1958 Strange Towers of Hanoi

    Strange Towers of Hanoi Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3784 Accepted: 23 ...

  2. 【CF944G】Coins Exhibition DP+队列

    [CF944G]Coins Exhibition 题意:Jack去年参加了一个珍稀硬币的展览会.Jack记得一共有 $k$ 枚硬币,这些硬币排成一行,从左到右标号为 $1$ 到 $k$ ,每枚硬币是正 ...

  3. C++文件流操作

    #include <iostream> #include <fstream> #include<iostream> using namespace std; int ...

  4. day_6.16网络编程

    单线程服务器select版: select ---->最多1024个 poll ----->解决了套接字上限的问题----->轮询检测 关于 sys模块: 通过fd找套接字 协程: ...

  5. C++编程相关工具

    1 文档类  (1) Doxygen  参考站点:http://www.doxygen.org  Doxygen是一种适合C风格语言(如C++.C.IDL.Java甚至包括C#和PHP)的.开放源码的 ...

  6. 新版谷歌浏览器怎么查找和改变编码格式 IT开发人员谷歌的编码格式

    解决方法在最下面,还有可下载的安装包 今天,无意中在解决一个乱码问题,后台是有过判断解决兼容性问题,但是有个别电脑还是有乱码问题,就去想改变下前台的编码格式,突然发现一向好用的谷歌,居然找不到编码格式 ...

  7. 我所知道的几种display:table-cell的应用

    .outer span {  display: table-cell; } 一.display:table-cell属性简述 display:table-cell属性指让标签元素以表格单元格的形式呈现 ...

  8. ubuntu为文件添加可执行权限

    为一个文件添加可执行权限 chmod +x filename 为一个文件夹下的所有文件添加可执行权限 chmod +x *

  9. Apache + PHP配置

    因工作需要,重新配置了Apache和PHP.想起当年曾经配置过,但是已经忘得差不多了.而且,也没有记录.从我个人来看,确实缺乏这样的训练,从国家教育体系来看,似乎也从未有过做科学记录的训练.中国的瓷器 ...

  10. Vitrual Box设置linux网络连接到外网

    Vitrual Box设置linux网络连接到外网 在虚拟机上安装好linux系统之后,经常会碰到ping不通www.baidu.com的情况,此时的情况多半是网络配置上的错误,linux在网络配置有 ...