说到什么是深浅拷贝,就不得不说python中赋值的含义,赋值并不是拷贝,而是将target(变量名)和object(对象本身)建立了一种联系,当一个object可变时,连接该object的任意一个target改变该object值都会影响其他连接该object的target的取值。如:

>>> a=[1,2,3]
>>> b=a
>>> b[0]=0
>>> b
[0, 2, 3]
>>> a
[0, 2, 3]

那如果只想改变一个mutable object的值,而它原来的值还保留,该怎么办呢?答案就是拷贝,通过python 内建库copy。

而拷贝又分为深拷贝(copy.deepcopy)和浅拷贝(copy.copy),深浅拷贝的区别在于对“复合对象”(即该对象还包含了其他对象,如list,dict等)时拷贝的不同:

对于浅拷贝,新建一个“复合对象”,该对象包含的是被拷贝对象的reference;

对于深拷贝,新建一个“复合对象”,尽量的把被拷贝对象中含有的对象全都深拷贝;

如:

-------------------------shallow copy-------------------
>>> a=[1,2,3]
>>> c=a.copy()
>>> c
[0, 2, 3]
>>> c[0]=4
>>> c
[4, 2, 3]
>>> a
[0, 2, 3] >>> d=[[0,1],2,3]
>>> e=d.copy()
>>> e[0][0]=100
>>> e
[[100, 1], 2, 3]
>>> d
[[100, 1], 2, 3] ----------------------deep copy--------------------------
>>> import copy
>>> f=copy.deepcopy(d)
>>> d
[[100, 1], 2, 3]
>>> f
[[100, 1], 2, 3]
>>> f[0][0]=5
>>> f
[[5, 1], 2, 3]
>>> d
[[100, 1], 2, 3] >>> g=[[[1],2]]
>>> h=copy.deepcopy(g)
>>> h[0][0][0]=100
>>> h
[[[100], 2]]
>>> g
[[[1], 2]]

 当然,对于list,dict自身的copy方法都是shallow copy

简述python中的深浅拷贝的更多相关文章

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

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

  2. Python 中的深浅拷贝

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

  3. Python中的深浅拷贝

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

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

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

  5. 挖一挖python中的深浅拷贝问题

    前几天在做面试题的时候,遇到一个与Python深浅拷贝的问题,今天总结出来一个方法,能够快速判断在对一个对象复制后,新对象与原来对象是否会互相影响的方法. 先抛出结论,然后我们对结论进行验证~~~ 先 ...

  6. Python中的深浅拷贝,赋值及引用

    简单来说,若对象a中存的是列表或字典等可变对象,b对a的浅拷贝只是对对象第一层的复制,修改b第二层的元素仍然会影响两个对象. 深拷贝则是不会影响原来的对象. import copy.copy() 浅拷 ...

  7. 【Python】Python中的深浅拷贝

    [转]python 复制(拷贝)对象 -- ::| 分类: Python |举报|字号 订阅 下载LOFTER我的照片书 | 需求: 你想复制一个对象.因为在Python中,无论你把对象做为参数传递, ...

  8. 浅谈Python中的深浅拷贝的区别

    深.浅拷贝总结 深拷贝 拷贝可变数据类型,如列表容器: a = [1, 2, [3, 4]] b = copy.deepcopy(a) a 与 b 所指的列表容器的空间地址不一致,即 id(a) != ...

  9. 关于Python中的深浅拷贝

    之前一直认为浅拷贝是拷贝内容的第一层,但是不开辟内存,只是增加新的指向原来的内容:深拷贝是拷贝是拷贝每一层并开辟内存. 其实这个是不严谨的不正确的. 从以上可以看出,浅拷贝中当时可变类型的时候,内存是 ...

  10. js中的深浅拷贝

    js中的深浅拷贝 js中有深拷贝.浅拷贝一说,所谓的深浅拷贝是针对value类型为引用类型(函数.对象.数组)而言的,大概理解的就是: 浅拷贝: 拷贝出的对象c和原始对象o,c和o在key对应的val ...

随机推荐

  1. kafka 认识kafka(一)

      一.简介 1.1 概述 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/ ...

  2. 001.GItLab介绍及云原生部署

    目录 gitlab介绍 gitlab cicd简介 gitlab特点 git主要目录 版本区别 gitlab部署 Omnibus 部署 部署需求 安装依赖 导入软件源 正式安装 准备证书 配置SSL及 ...

  3. 面试题30. 包含min函数的栈

    地址:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/ <?php /** 定义栈的数据结构,请在该类型中实现一 ...

  4. k8s DCGM GPU采集指标项说明

    dcgm-exporter 采集指标项 https://help.aliyun.com/document_detail/433222.html#section-oin-6mf-6j0 指标 解释 dc ...

  5. 使用Semantic Kernel框架和C#.NET 实现大模型Function Calling

    最近研究Function Call,总结了一篇文章,分享给大家 一.GPT-4中实现函数调用功能 定义函数:首先,开发一个函数.例如,一个获取天气信息的函数可能如下: def get_current_ ...

  6. Python字符串前缀u、r、b、f含义(转)

    1.字符串前加 u 例子: u"字符串中有中文" 含义: 前缀u表示该字符串是unicode编码,Python2中用,用在含有中文字符的字符串前,防止因为编码问题,导致中文出现乱码 ...

  7. 掌握 K8s Pod 基础应用 (二)

    Pod生命周期 我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期,它主要包含下面的过程: pod创建过程 运行初始化容器(init container)过程 运行主容器(main co ...

  8. 认识知识库与知识图谱:从CDSS的前世今生聊聊模型幻觉问题

    提供AI咨询+AI项目陪跑服务,有需要回复1 今年很多医院已经部署上了DeepSeek,甚至有医生真的使用它对患者进行诊断,但马上就出问题了:AI 误诊,上海患者获赔 127 万. 不过,我去搜索详情 ...

  9. 用于线程同步的Interlocked系列函数主要有哪些

    原子访问 通过Interlocked系列函数是 Windows API 提供的一组原子操作函数,用于在多线程环境中安全地操作共享变量.当我们执行这些Interlocked系列函数的时候 ,函数会对总线 ...

  10. 【Linux】5.1 Shell简介

    Shell简介 1. Shell基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这 ...