Python的深浅copy详解

想要看明白原理,首先要清楚变量数据类型的可变不可变类型。

Python的数据类型可变不可变

当我们对列表进行复制一份给新的变量名的时候,一共有两种方式来进行分,分别是浅copy、深copy。那么两者有什么区别呢?都该什么时候使用呢?让我来为你揭晓吧。

一、浅copy的原理

首先说一下浅copy。

1.1 浅copy的定义

先看图

我们以copy一个列表为例。浅copy就是将Python的第一层的内存地址进行 了一下重新copy,新复制的列表内的地址仍指向原列表的内存地址。即新copy的列表内的元素指向的变量值得内存地址是同一个。

1.2 浅copy的方法

list1 = ["tom",18,["play","sleep"]]

# 1.使用copy()的方法。
list2 = list1.copy() # 2.使用切片的方法。
list3 = list1[:]

二、深copy的原理

2.1 深copy的定义

先看图

仍以该列表为例。深copy是将原列表内部的可变数据类型重新申请了一块内存空间存放所含元素的内存地址,对于不可变数据类型则是直接指向其所在的内存空间地址。

2.2 深copy的方法

list1 = ["tom",18,["play","sleep"]]

# 深copy的方法
import copy
list2 = copy.deepcopy(list1)

三、深、浅copy的区别

深、浅copy主要区别就是在复制内部元素的可变数据类型方面。

浅copy对可变数据类型是共用一份内存地址,没有完全将原值和copy的值内存地址分开。当对可变数据类型进行改的时候,两者都会改变。

深copy则将可变数据类型存放的内存地址重新申请了一份内存空间,将两者完全分开。对可变数据类型进行改的时候,两者不会一起改变。

Python的深浅copy详解的更多相关文章

  1. python 的内存回收,及深浅Copy详解

    一.python中的变量及引用 1.1 python中的不可变类型: 数字(num).字符串(str).元组(tuple).布尔值(bool<True,False>) 接下来我们讲完后你就 ...

  2. 深浅copy详解

    一. 前言 在python中,对象的赋值和深浅copy,是有差异的.最终得的值也不同,下面我们就通过几个例子,来看下它们之间的区别. 二. 赋值 list2 = ["jack",2 ...

  3. Python列表深浅复制详解

    转自:https://www.cnblogs.com/blaomao/p/7239203.html 在文章<Python 数据类型>里边介绍了列表的用法,其中列表有个 copy() 方法, ...

  4. Python 列表深浅复制详解

    在文章<Python 数据类型>里边介绍了列表的用法,其中列表有个 copy() 方法,意思是复制一个相同的列表.例如 names = ["小明", "小红& ...

  5. Python数据类型及其方法详解

    Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知 ...

  6. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  7. python引用和对象详解

    python引用和对象详解 @[马克飞象] python中变量名和对象是分离的 例子 1: a = 1 这是一个简单的赋值语句,整数 1 为一个对象,a 是一个引用,利用赋值语句,引用a指向了对象1. ...

  8. Python对Excel操作详解

      Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl   ...

  9. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

随机推荐

  1. 洛谷 P3909 异或之积 题解

    原题链接 本人看了其它解法,发现本人的解法还是 首创 ! 而且我的解法好像和 \(\times 6\) 没什么关系 -- (如果没 \(\times 6\),我没还不用算逆元) 别人的思路呢,大都是从 ...

  2. 谷歌出品EfficientNet:比现有卷积网络小84倍,比GPipe快6.1倍

    [导读]谷歌AI研究部门华人科学家再发论文<EfficientNet:重新思考CNN模型缩放>,模型缩放的传统做法是任意增加CNN的深度和宽度,或使用更大的输入图像分辨率进行训练,而使用E ...

  3. class字节码的结构

    class字节码的结构 使用javap -verbose 命令分析一个.class字节码文件时(以下简称字节码文件),将会分析该字节码文件的魔数,版本号,常量池,类信息,类的构造方法,类中的方法信息, ...

  4. 将图片base64格式转换为file对象并读取(两种方式读取)

    两种方式读取,一种URL.createObjectURL,另一种fileReader   var base64 = ` data:image/jpeg;base64,/9j/4AAQSkZJRgABA ...

  5. 1.用eclipse创建maven工程

    第一步.File→New→Maven Project (需要下载安装配置Maven等,这些步骤省略) (找不到的话选Other,里面的Maven文件夹里有) 二.记得勾选上,然后点Next 三.填完点 ...

  6. RuntimeError: Exception thrown in SimpleITK ReadImage: /tmp/SimpleITK/Code/IO/src/sitkImageReaderBase.cxx:107: sitk::ERROR: Unable to determine ImageIO reader for "./data/.train.txt.swp"问题解决

    原因:产生此类错误是因为SimpleITK不能读取ubuntu中的隐藏文件,比如".train.txt.swp",因为此类文件是隐藏文件另外SimpleITK不支持读取此类文件. ...

  7. 实验四 数据查询3-group by等

    实验四 数据库查询 一.  实验内容: 1. Group by语句 2. Having 语句 3. Order by语句 4. Limit语句 5. Union语句 6. Handler语句 二.  ...

  8. D. Little Artem and Dance(带环模拟 + 规律)

    D. Little Artem and Dance Little Artem is fond of dancing. Most of all dances Artem likes rueda - Cu ...

  9. 艾编程coding老师课堂笔记:java设计模式与并发编程笔记

    设计模式概念 1.1 什么是设计模式 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性. ...

  10. (CSS):last-child与:last-of-type区别

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>la ...