深浅拷贝

列表存放值的时候,是先申请一块内存空间,存放索引和内存地址的对应关系,其实通俗的来说列表内不存真正的值,是一种间接存放的对应关系;

  • 列表内存不可变类型的数据

就比如说,如果现在将L列表索引0位置的值修改为66,那么这个过程发生了什么?通俗理解为去L[0]去值11的路被销毁了,现在通往了值66,那么这个对应关系就修改了,再次索引出来的L[0]就是66

不管是一维的还是二维的道理都是如此;

二维

浅拷贝

只拷贝了一层,后续需要结合可变与不可变类型理解来决定,

如果一维列表内没有可变类型,其实浅拷贝的影响并不大,如果一维列表内有可变类型的元素,那么就会造成影响

l = [11,22,['xx','yy']]
'''l列表是二维的,列表套列表的结构''' # 浅拷贝
new_l = [:]
# 修改原列表
l[2][0] = 'zz'
print('新列表',new_l) # 新列表 [11,22,['zz','yy']]
print('源列表',l) # 原列表 [11,22,['zz','yy']]
print(id(l[0]),id(l[1]),id(l[2])) # 1627619440 1627619472 2225456877448
print(id(new_l[0]),id(new_l[1]),id(new_l[2])) # 1627619440 1627619472 2225456877448
'''
总结:不论修改原列表还是新列表,修改列表内的不可变类型元素不会对原列表或新列表造成影响,如果修改的是列表内的可变类型元素,那么原列表或新列表会随着修改而修改
原理:拷贝对于不可变类型来说拷贝的是值,但是拷贝对于可变类型元素来说拷贝的是对应关系,可以通过查看原列表和新列表的id值来验证,id值是一样的
'''

总结:不论修改原列表还是新列表,修改列表内的不可变类型元素不会对原列表或新列表造成影响,如果修改的是列表内的可变类型元素,那么原列表或新列表会随着修改而修改

原理:拷贝对于不可变类型来说拷贝的是值,但是拷贝对于可变类型元素来说拷贝的是对应关系,可以通过查看原列表和新列表的id值来验证,id值是一样的

修改值发生了什么变化?

不可变类型:任然不变

可变类型:跟着改变

深拷贝

深拷贝其实就是对浅拷贝不能处理的可变类型进行处理,对应关系更深一层copy;

我们潜意识理解的拷贝,拷贝出来一份你玩你的我玩我的互不影响,深copy就做到如此;

导入:from copy import deepcopy

from copy import deepcopy
l = [11,22,['xx','yy']]
new_l = deepcopy(l)
print(l,id(l)) # [11, 22, ['xx', 'yy']] 1305767841288
print(new_l,id(new_l)) # [11, 22, ['xx', 'yy']] 1305767841352
print(id(l[0]),id(l[1]),id(l[2])) # 1627619760 1627620112 2688776670984
print(id(new_l[0]),id(new_l[1]),id(new_l[2])) # 1627619760 1627620112 2688776669256 '''
列表的id值不一样就代表着这两个列表是不同的列表,两个完全不一样的对象,子列表也是一样
'''
'''不可变类型的id还是一样,不可变类型的id就不一样了,那么列表就相当于造了一个新的列表了'''

现在再修改哪个值都不会对原列表或新列表有影响现在修改值只需修改对应关系再指向新值就可以了

女朋友问我深浅copy到底是什么?的更多相关文章

  1. Objective-C基础之简析深浅copy

    一.从面向对象到Objective-C概览copy 1.面向对象: In object-oriented programming, object copying is creating a copy ...

  2. python深浅copy探究

    引入 在python程序中,如果我们操作一个变量的值去做运算,而又想在下次调用时,仍使用原来的变量的值去做运算,那么我们我们就需要将这个变量去做备份,这就是本文所要探究的问题. 开始 变量-对象-引用 ...

  3. Python之深浅copy与字符编码

    一.深浅copy 1. 首先看赋值运算 l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['barr ...

  4. 总结day6 ---- set集合,基本类型的相互转化,编码,数据类型总结,循环时候不要动列表或者字典,深浅copy

    python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. 总结 一,id,is,== 在Python中,id是什么?id是内存地址,比如你利用id ...

  5. day07深浅copy与流程控制

    目录:流程控制 0:补充(了解) 短路运算:偷懒原则,偷懒到哪个位置,就把当前位置的值返回 深浅copy 1.循环之while循环 循环的语法与基本使用 死循环与效率问题 循环的应用 退出循环的两种方 ...

  6. python基础3(元祖、字典、深浅copy、集合、文件处理)

    本次内容: 元祖 字典 浅copy和深copy 集合 文件处理 1.1元祖 元祖(tuple)与列表类似,不同之处在于元祖的元素不能修改,元祖使用小括号(),列表使用方括号[].元祖创建很简单,只需要 ...

  7. python学习笔记三 深浅copy,扩展数据类型(基础篇)

    深浅copy以及赋值 对于字符串和数字而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy n1 = #n1 = 'hahahaha' #赋值n2 = n1#浅co ...

  8. Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数

     一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...

  9. Python 基础之函数、深浅copy,set及练习

    三元运算符通常在Python里被称为条件表达式,这些表达式基于真(true)/假(not)的条件判断,在Python 2.4以上才有了三元操作. 语法格式: X if C else Y 有了三元表达式 ...

随机推荐

  1. 用Java实现在123456789中随机插入+或者-,使表达式的结果为100

    这里我的思路是暴力算法.就是不断试错,不限循环次数,直到找到正确的情况为止. 通过走随机,不断控制在123456789中添加+或者-,再通过正则表达式筛选出所有的数字(包含正负),转换为Integer ...

  2. Java执行cmd命令、bat脚本、linux命令,shell脚本等

    1.Windows下执行cmd命令 如复制 D:\tmp\my.txt 到D:\tmp\my_by_only_cmd.txt 现文件如图示: 执行代码: private static void run ...

  3. uos系统离线状态下进入开发者模式

    需到处机器信息,接着登入指定的uos开发者网站,下载证书,然后在机器上加载证书,重启即可.

  4. Kubernetes-三大开放接口-初见

    目录 容器运行时接口CRI 历史 简介 架构 启用 CRI CRI 接口 当前支持的 CRI 后端 容器网络接口CNI 简介 接口定义 官方网络插件 接口参数 CNI 的特性 在 kubernetes ...

  5. 手把手教你使用HarmonyOS本地模拟器

    2021年的华为开发者大会(HDC2021)上,我们随DevEco Studio 3.0 Beta1版本发布首次推出了本地模拟器(也称为Local Emulator),支持模拟手机品类. 我们通过下面 ...

  6. 最新版的Dubbo Admin 3.0 本地启动方式

    项目下载 项目地址:https://github.com/apache/dubbo-admin 如下图,使用git地址直接构建或者下载zip包构建源码都可以,我用的是下载的zip包, 项目架构说明 d ...

  7. 四、MyBatis注解开发

    MyBatis中提供注解有: @Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现查询 @Result:实现结果集封装 @Results:可以与@Resu ...

  8. embarrass的writeup

    大家好,这次我要为大家带来都是攻防世界misc部分embarrass的writeup.     首先下载附件,是一个压缩包,解压后找到一个流量包.用wireshark打开,直接在搜索框中输入flag{ ...

  9. 可视化里程碑:可拖拽使用的可视化BI工具

    在数据量越来越大的今天,如何利用好数据,更好的为人类社会服务,成为人们所关心的话题,而其中数据可视化作为最后一个环节,也是人们最为直观的感受,自然而然备受重视.同质化的应用越来越多,应用开发者也开始在 ...

  10. hadoop 无法访问50070

    windows无法访问hadoop web端口 windows hosts文件:C:\Windows\System32\drivers\etc centos防火墙没有关,关闭参考 hadoop cor ...