问:深拷贝、浅拷贝、直接赋值的区别是什么?并举例说明

1.区别

(1)直接赋值对象的引用

(2)浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象

(3)深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象

定义说得有点抽象,简而言之:

深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用

假设B复制了A,修改A的时候,看B是否发生变化:

(1)如果B跟着也变了,说明是浅拷贝,

(2)如果B没有改变,说明是深拷贝

2.举例说明

(1)直接赋值

# 直接赋值
# 定义列表
names = ["test1","test2","test3",["kangkang","mike"],"test4","test5"]
# 直接赋值
names1 = names #无论 names中修改了什么,names与names1保持完全一致
# 修改原列表
names[1] = "test6"
names[-3][0] = "nice"
# 打印结果
print("names:",names)
print("names1:",names1)

输出结果:

names: ['test1', 'test6', 'test3', ['nice', 'mike'], 'test4', 'test5']
names1: ['test1', 'test6', 'test3', ['nice', 'mike'], 'test4', 'test5']

解析:直接赋值,names 和 names1 指向同一个对象

(2)浅拷贝

# 浅拷贝
# 定义列表
names = ["test1","test2","test3",["kangkang","mike"],"test4","test5"]
# 浅拷贝列表
names1 = names.copy()
# 修改原列表 names
names[1] = "test6"
names[-3][0] = "nice"
# 打印
print("names:",names)
print("names1:",names1)

输出结果:

names: ['test1', 'test6', 'test3', ['nice', 'mike'], 'test4', 'test5']
names1: ['test1', 'test2', 'test3', ['nice', 'mike'], 'test4', 'test5']

解析:浅拷贝,拷贝父对象,不会拷贝对象的内部的子对象,他们的子对象 Y 还是指向同一个对象

(3)深拷贝

# 深拷贝
# 引入 copy 模块
import copy
names = ["test1","test2","test3",["kangkang","mike"],"test4","test5"]
names1 = copy.deepcopy(names)
# 修改原列表
names[-3][0] = "ken"
# 打印结果
print("names:",names)
print("names1:",names3)

输出结果:

names: ['test1', 'test2', 'test3', ['ken', 'mike'], 'test4', 'test5']
names1: ['test1', 'test2', 'test3', ['kangkang', 'mike'], 'test4', 'test5']

解析:深拷贝,names 和 names1 完全拷贝了父对象及其子对象,两者完全独立

Python【每日一问】01的更多相关文章

  1. Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词

    #coding:utf-8 import os,re path = 'test' files = os.listdir(path) def count_word(words): dic = {} ma ...

  2. python每日一函数 - divmod数字处理函数

    python每日一函数 - divmod数字处理函数 divmod(a,b)函数 中文说明: divmod(a,b)方法返回的是a//b(除法取整)以及a对b的余数 返回结果类型为tuple 参数: ...

  3. Python全栈day 01

    Python全栈day 01 一.计算机认识 用户 软件,类似微信.QQ.游戏等应用程序,由程序员编写,在系统中运行,完成各种活动,方便人们使用. 操作系统,主要分为windows系统.Linux系统 ...

  4. 每日一问:Android 消息机制,我有必要再讲一次!

    坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 我 17 年的 面试系列,曾写过一篇名为:Android 面试(五):探 ...

  5. 每日一问:谈谈 volatile 关键字

    这是 wanAndroid 每日一问中的一道题,下面我们来尝试解答一下. 讲讲并发专题 volatile,synchronize,CAS,happens before, lost wake up 为了 ...

  6. 每日一问:讲讲 Java 虚拟机的垃圾回收

    昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...

  7. 每日一问:你了解 Java 虚拟机结构么?

    对于从事 C/C++ 程序员开发的小伙伴来说,在内存管理领域非常头疼,因为他们总是需要对每一个 new 操作去写配对的 delete/free 代码.而对于我们 Android 乃至 Java 程序员 ...

  8. 每日一问:LayoutParams 你知道多少?

    前面的文章中着重讲解了 View 的测量流程.其中我提到了一句非常重要的话:View 的测量匡高是由父控件的 MeasureSpec 和 View 自身的 `LayoutParams 共同决定的.我们 ...

  9. 每日一问:简述 View 的绘制流程

    Android 开发中经常需要用一些自定义 View 去满足产品和设计的脑洞,所以 View 的绘制流程至关重要.网上目前有非常多这方面的资料,但最好的方式还是直接跟着源码进行解读,每日一问系列一直追 ...

  10. python每日一练:0007题

    第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. # -*- coding:utf-8 -*- import os def count ...

随机推荐

  1. RabbitMQ环境安装及入门

    1. 说明 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地方, ...

  2. linux 中mv命令

    mv 命令是一个与cp类似的命令,但是它并非创建文件或目录的复制品/副本.不管你在使用什么版本的Linux系统,mv 都默认安装在你的Linux系统上了.来看一下 mv 命令在日常操作中的一些例子. ...

  3. HDFS API编程

    3.1常用类        3.1.1Configuration Hadoop配置文件的管理类,该类的对象封装了客户端或者服务器的配置(配置集群时,所有的xml文件根节点都是configuration ...

  4. 打开本页N秒后跳转页面

    在head标签里面 <meta http-equiv="refresh" content="4;url=" />

  5. LAMP架构(三)

    第十九课 LAMP架构(三) 目录 一.配置防盗链 二.访问控制Directory 三.访问控制FilesMatch 四.限定某个目录禁止解析php 五.限制user_agent 六.php相关配置 ...

  6. NSIS脚本 打包安装程序

    相关工具 nsis http://nsis.sourceforge.net/Special_Builds HM NIS Edit http://hmne.sourceforge.net/ 例子: ; ...

  7. JavaScript 简单的实现 sleep功能 .

    function start(){ // console.log("Request handle 'start' was called."); function sleep(mil ...

  8. Eclipse安装Activiti Designer插件

    本人使用的是在线安装: 打开Eclipse -> Help -> Install New SoftWare-> Add 然后按照如下对话框输入: Name:Activiti BPMN ...

  9. C# ModBus Tcp读写数据 与服务器进行通讯

    前言 本文将使用一个NuGet公开的组件技术来实现一个ModBus TCP的客户端,方便的对Modbus tcp的服务器进行读写,这个服务器可以是电脑端C#设计的,也可以是PLC实现的,也可以是其他任 ...

  10. System.IO.FileSystemWatcher

    这个类功能很强.可以实时监测文件系统的变化. https://msdn.microsoft.com/zh-cn/library/system.io.filesystemwatcher.aspx 事件 ...