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

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. 匿名函数lambda及面试题三道

    # 函数名 = lambda 参数 :返回值. 匿名函数只是函数,如果要通过可迭代对象给匿名函数传参,就需要使用 map 或者 filter calc = lambda n:n**n calc(1)c ...

  2. PXE 实现自动装机

    搭建 PXE 远程安装服务器 image_1cqg00g0os9b1pop122e98o19ef9b.png-255kB 1.把光盘源放在/var/ftp/centos6 因为远程装机对放服务器得读取 ...

  3. Linux下实现ssh免密认证

    添加域名映射 配置ssh免密登陆 拷贝master服务器公钥至本机 验证master服务器ssh免密登录其余服务器 添加域名映射 打开hosts文件 Vim /etc/hosts 添加域名对象 配置s ...

  4. leetcode python 008

    ##  字符串转化为整数##  懒得自己做int0=63435435print(int(int0))

  5. swift3笔记

    备注:这里只是个人的观点,有的地方也是copy,多多指教,个人笔记,有侵犯你们版权的地方还望海涵!!! 个人觉得swift和OC最大的区别就是增加了许多现代化的东西,java里面的闭包,private ...

  6. GitHub入门与实践 读书笔记一:欢迎来到GitHubde世界

    1.什么是GitHub GitHubshi为开发者提供Git仓库的托管服务.除此之外,还为开发者提供能帮助提高代码效率和品质的功能. GitHub和Git的区别? Git是源码仓库而GitHub是在网 ...

  7. Apache Flume 学习笔记

    # 从http://flume.apache.org/download.html 下载flume ############################################# # 概述: ...

  8. MFC VC++获取当前程序的运行路径

    ]; GetModuleFileName(, szDir, ); int i; i = lstrlen(szDir) - ; ) { if(szDir[i] == _T('\\')) { szDir[ ...

  9. DAY 04运算符与流程控制

    输入输出补充: python2与python3的输入输出不同 python2中有两种用户 输入方式,一种是raw_input,和input raw_input与python3的input是相同的 而p ...

  10. swift3.0自定义相机界面

    这是公司上上上一个项目的自定义相机界面,原来是swift2.0写的,今天改为swift3.0,记录一下. 效果图如下:                                         ...