浅深copy即完全复制一份和部分复制一份

浅深copy在列表数据量较大时不建议使用,比较消耗内存资源

1.赋值运算

l1 = [1,'s',[1,2,3]]
l2 = l1
print(id(l1),id(l2)) #34103880 34103880
l1[2][1] = 'h'
print(id(l1),id(l2)) #34103880 34103880

l1和l2指向的是相同的内存地址

2.浅copy

l1 = [1,'s',[4,5,6,'s','h']]
l2 = l1.copy()
print(id(l1),id((l2))) #5988936 6475464
print(id(l1[0]),id(l2[0])) #8791394136912 8791394136912
print(id(l1[2][0]),id(l2[2][0])) #8791410914224 8791410914224

浅copy即开辟一个新的内存空间放一个新的列表,但是里面的元素两边都是公用的

3.深copy

import copy
l1 = [1,'s',False,(2,3,4),{1,2,3},['a','b']]
l2 = copy.deepcopy((l1))
print(id(l1),id(l2)) #42180488 42179272
print(l1,l2)
#不可变数据类型
print(id(l1[0]),id(l2[0])) #8791394136912 8791394136912
print(id(l1[1]),id(l2[1])) #37970136 37970136
print(id(l1[2]),id(l2[2])) #8791410383216 8791410383216
print(id(l1[3]),id(l2[3])) #39259880 39259880
#可变数据类型
print(id(l1[4]),id(l2[4])) #42293064 42293512
print(id(l1[5]),id(l2[5])) #42685064 42685192

深copy是开辟一个新的列表内存空间,当列表中有不可变数据类型的元素时则与原列表共用,当列表有可变数据类型的元素时则会重新创建一个内存地址

面试题:

l1 = [1, 2, 3, 4, ['alex']]
l2 = l1[::]
l1[-1].append(666)
print(l2)  #[1, 2, 3, 4, ['alex', 666]]

Python学习日记(六) 浅深copy的更多相关文章

  1. Python学习日记之字典深复制与浅复制

    Python中通过copy模块有两种复制(深复制与浅复制) copy 浅复制 复制时只会复制父对象,而不会复制对象的内部的子对象. deepcopy 深复制 复制对象及其子对象 因此,复制后对原dic ...

  2. Python 学习日记(第三周)

    知识回顾 在上一周的学习里,我学习了一些学习Python的基础知识下面先简短的回顾一些: 1Python的版本和和安装 Python的版本主要有2.x和3.x两个版本这两个版本在语法等方面有一定的区别 ...

  3. python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍

    目录 python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍. 二丶列表,其它语言称为数组 1.列表的定义,以及语法 2.列表的使用,以及常用方法. 3.列表的常用操作 ...

  4. Python学习第六课

    Python学习第六课 课前回顾 列表 创建 通过 [] :写在[]里,元素之间用逗号隔开 对应操作: 查 增 append insert 改(重新赋值) 删除(remove del pop(删除后会 ...

  5. Python学习日记 --day2

    Python学习日记 --day2 1.格式化输出:% s d  (%为占位符 s为字符串类型 d为数字类型) name = input('请输入姓名') age = int(input('请输入年龄 ...

  6. python学习日记(基础数据类型及其方法01)

    数字 int 主要是用于计算的,常用的方法有一种 #既十进制数值用二进制表示时,最少使用的位数i = 3#3的ASCII为:0000 0011,即两位 s = i.bit_length() print ...

  7. python学习笔记-(六)深copy&浅copy

    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. 赋值 赋值其实只是传递对象引用,引用对象 ...

  8. Python学习-赋值、浅copy和深copy

    Python Copy: 在Python语言中,分为浅拷贝和深拷贝两种形式,也就是官方文档中的Shadow copy和Deep copy.在对简单的对象(object)进行复制时,两者没有区别,如下面 ...

  9. python学习日记(深浅copy)

    赋值 #赋值,指向同一内存地址 l1 = [1,2,3,4,5] l2 = l1 print(l1,l2) print(id(l1),id(l2)) 浅copy #浅copy,第一层互相独立,创建了新 ...

随机推荐

  1. [转]npm安装教程

    原文地址:https://www.cnblogs.com/lgx5/p/10732016.html 一.使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理器. webpa ...

  2. [LeetCode] 535. Encode and Decode TinyURL 编码和解码短网址

    Note: This is a companion problem to the System Design problem: Design TinyURL. TinyURL is a URL sho ...

  3. [LeetCode] 771. Jewels and Stones 珠宝和石头

    You're given strings J representing the types of stones that are jewels, and S representing the ston ...

  4. namespace Measure

    namespace Measure { public delegate void DelegateTrigger(); public class HMeasureSYS : System.IDispo ...

  5. [资料]ObjectARX 2020参考指南翻译中文版

    chm使用Google Chrome浏览器翻译,有些翻译不是很理想,因为2万5千多个html文件, 修正难度太大,所以只处理了一部分. 非常感谢 gzxl 辛苦肉眼修正一些翻译问题. 欢迎进入QQ群: ...

  6. vscode添加vue文件模板

    文件->首选项->用户代码片段->输入vue,打开vue.json 添加模板json "Print to console": { "prefix&quo ...

  7. [转帖]在 k8s 中自动为域名配置 https

    在 k8s 中自动为域名配置 https https://juejin.im/post/5db8d94be51d4529f73e2833 随着 web 的发展,https 对于现代网站来说是必不可少的 ...

  8. day40——数据库、数据库分类、安装、修改密码、字符集编码、简单语句介绍

    day40 详情请看:https://www.cnblogs.com/clschao/articles/9907529.html 数据库 数据库 简而言之可视为电子化的文件柜--存储电子文件的处所,用 ...

  9. Linux -- touch 命令

    在Linux中,每个文件都关联一个时间戳,并且每个文件搜会存储最近一次访问的时间.最近一次修改的时间和最近一次变更的时间等信息.所以,无论何时我们创建一个新文件,访问或者修改一个已经存在的文件,文件的 ...

  10. Java -- 基于JDK1.8的ThreadLocal源码分析

    1,最近在做一个需求的时候需要对外部暴露一个值得应用  ,一般来说直接写个单例,将这个成员变量的值暴露出去就ok了,但是当时突然灵机一动(现在回想是个多余的想法),想到handle源码里面有使用过Th ...