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

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. python 利用selectors实现异步I/O

    它的功能与linux的epoll,还是select模块,poll等类似:实现高效的I/O multiplexing,  常用于非阻塞的socket的编程中: 简单介绍一下这个模块,更多内容查看 pyt ...

  2. Mysql 截取日期的方法

    //显示年月日 select date_format(date ,'%Y-%m-%d' ) from talbe_a //根据年月日分组 select date_format(date ,'%Y-%m ...

  3. vue-router进阶-1-导航守卫

    导航守卫主要用来通过跳转或取消的方式守卫导航 全局守卫,使用 router.beforeEach 注册一个全局前置守卫 const router = new VueRouter({ ... }) ro ...

  4. intelij idea常用功能介绍

    1.查看本地文件修改记录 保存本地修改记录: 可以将system下的LocalHistory保存,到另一个目录,需要的时候保存即可. 2.debbuger查看代码 1)优化设置 2)常用 3.条件断点 ...

  5. nmon监控与 nmon analyser分析

    参考 https://www.cnblogs.com/wnfindbug/p/5719181.html 1.下载 nmon https://zh.osdn.net/projects/sfnet_nmo ...

  6. 18-09-20 关于Xlwings读写基础1

    一 利用xlwings 读取Excel 的读取修改数据 import xlwings as xw""" # 1. 读一个已存在的Excel文件:利用xlwings 读取E ...

  7. nodejs -- event 模块, 事件模块.

    1. 注册事件 on 或者 addListener,触发事件 emit 1-1简单的使用: var EventEmitter = require('events').EventEmitter; var ...

  8. 关于Error during managed flush [Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1]错误

    控制台报错: 08:07:09.293 [http-bio-8080-exec-2] ERROR org.hibernate.internal.SessionImpl - HHH000346: Err ...

  9. 网络爬虫之网站图片爬取-python实现

    版本1.5 本次简单添加了四路多线程(由于我电脑CPU是四核的),速度飙升.本想试试xPath,但发现反倒是多此一举,故暂不使用 #-*- coding:utf-8 -*- import re,url ...

  10. laravel 解决保存Emoji 表情问题

    ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; ALTER TABLE table ...