深、浅拷贝总结


深拷贝

  • 拷贝可变数据类型,如列表容器:

    • a = [1, 2, [3, 4]]
    • b = copy.deepcopy(a)
  • a 与 b 所指的列表容器的空间地址不一致,即 id(a) != id(b)

  • a 与 b 列表容器中的可变数据类型的空间地址不一致

  • a 与 b 列表容器中的不可变数据类型的空间地址一致

注意:

  • a 列表容器中的某些元素发生改变时,b 容器中的相应元素是否会发生相同的改变?

    答案是: a 容器中的任何元素发生任何变化,与 b 容器毫无瓜葛,b 中元素不会发生变化 !

图示


浅拷贝

  • 拷贝可变数据类型,如列表容器:

    • a = [1, 2, [3, 4]]
    • b = copy.copy(a)
  • a 与 b 所指的列表容器的空间地址不一致,即 id(a) != id(b)

  • a 与 b 列表容器中的所有元素的空间地址都是一致的!

注意:

  • a 列表容器中的某些元素发生改变时,b 容器中的相应元素是否会发生相同的改变?

    答案是:

    1. 若 a 容器中的第一级元素发生改变,b 容器中的相应的元素不会发生改变!
    2. 若 a 容器中的第二级乃至更深层级的元素发生改变,b 容器中的相应元素也会发生相同的改变!

图示


深浅拷贝不可变元素

import copy

a = 10
b = copy.copy(a)
b = copy.deepcopy(a)

当深浅拷贝不可变数据类型,如字符串时,a 与 b 所指向的空间地址是一致的!

图示

浅谈Python中的深浅拷贝的区别的更多相关文章

  1. 浅谈python中__str__和__repr__的区别

    很多时候我们在创建一个类的时候,在终端打印类或者查看的时候一般都不会得到一个太满意的结果 class T: def __init__(self): self.color="red" ...

  2. 浅谈Python 中 __getattr__与__getattribute__的区别

    __getattr__与__getattribute__均是一般实例属性截取函数(generic instance attribute interception method),其中,__getatt ...

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

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

  4. Python 中的深浅拷贝

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

  5. 转 浅谈C++中指针和引用的区别

    浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别   指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性 ...

  6. 浅谈 HTTP中Get与Post的区别

    浅谈 HTTP中Get与Post的区别 存在的误区 有人说 HTTP 协议下的 Get 请求参数长度是有大小限制的,最大不能超过XX,而 Post 是无限制的,看到这里,我想他们定是看多了一些以讹传讹 ...

  7. 浅谈Java中set.map.List的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

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

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

  9. Python中的深浅拷贝

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

随机推荐

  1. synchronized与锁升级

    1 为什么需要synchronized? 当一个共享资源有可能被多个线程同时访问并修改的时候,需要用锁来保证数据的正确性.请看下图: 线程A和线程B分别往同一个银行账户里面添加货币,A线程从内存中读取 ...

  2. java面试必备知识点-上中下三篇写的很详细

    参考博客:写的还是相当的经典 http://www.cnblogs.com/absfree/p/5568849.html 上中下三篇写的很详细 http://blog.csdn.net/riverfl ...

  3. QUIC/HTTP3 协议简析

    从 HTTP 的进化历史讲起,细说使用协议的变迁,了解原因发现问题,解码 QUIC 在 HTTP3 中的支撑作用,共同探讨 HTTP3 的未来. HTTP.HTTP2 和 HTTP3 先和大家来回顾一 ...

  4. c++ string 用法

    //char *和string 转换: string str="1234567; const char *p = str.c_str(); //不过这是的 *p 是const类型,不能对他进 ...

  5. escape sequence "\c"

    #include <stdio.h> int main() { printf("Hello World !\c"); return ; } [::@wjshan0808 ...

  6. 多核CPU硬件架构介绍

    转自:http://book.51cto.com/art/201004/197196.htm SISD.MIMD.SIMD.MISD计算机的体系结构 1. 计算平台介绍 Flynn于1972年提出了计 ...

  7. (私人收藏)蓝色夜空背景的通用商务PPT模板

    蓝色夜空背景的通用商务PPT模板 https://pan.baidu.com/s/1tsmPEdE5gjDDSxIyMDJGCA0m28

  8. 04-springboot整合elasticsearch初识-简单增删改查及复杂排序,分页,聚合操作

        前面大概了解了一下elasticsearch的数据存储和数据的查询.现在学习一下,es的复杂操作.     官网相关文档地址:https://www.elastic.co/guide/en/e ...

  9. HDU - 5963 朋友(思维题)

    题干 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双 ...

  10. VS插件 resharper安装破解教程

    https://masuit.com/20 ReSharper是一款由jetbrains开发的针对C#, VB.NET, ASP.NET, XML,和XAML的编辑器.沿袭了jetbrains开发工具 ...