复制、浅拷贝、深拷贝
目录
一、概念
1.复制(赋值)
2.浅拷贝
3.深拷贝
二、示例
一、概念
1.复制(赋值)
产生原对象的引用,不开辟新的内存空间,使用指针指向原对象,跟原对象完全一样。当对原对象进行操作时,复制对象同样会改变。
2.浅拷贝
将原对象拷贝一份,但是只拷贝原对象表层元素,而对原对象中的子对象没有拷贝,所以当原对象中的子对象发生变化时,浅拷贝后生成的对象也会发生变化。当原对象表层元素改变时,浅拷贝对象不变。
3.深拷贝
将原对象连同其子对象一块进行了拷贝,与原对象已经没有关联,所以深拷贝后的对象不会随着原对象的变化或者子对象的变化而改变。
二、示例
1.不可变对象
import copy #使用copy中方法
a=(1,2,3)
b1=a #复制,结果如下,值与地址相同
b2=copy.copy(a) #浅拷贝,结果如下,值与地址相同
b3=copy.deepcopy(a) #深拷贝,结果如下,值与地址相同print(a) #(1, 2, 3)
print(id(a)) #2428737531072
print(b1) #(1, 2, 3)
print(id(b1)) #2428737531072
print(b2) #(1, 2, 3)
print(id(b2)) #2428737531072
print(b3) #(1, 2, 3)
print(id(b3)) #2428737531072#python
值与地址相同:复制、浅拷贝、深拷贝。
2.变量对象
(1)不改变原对象
import copy #使用copy中方法
a=[1,2,3]b1=a #复制,结果如下,值与地址相同
b2=copy.copy(a) #浅拷贝,结果如下,值相同地址不同
b3=copy.deepcopy(a) #深拷贝,结果如下,值相同地址不同print(a) #[1, 2, 3]
print(id(a)) #1426627341312
print(b1) #[1, 2, 3]
print(id(b1)) #1426627341312
print(b2) #[1, 2, 3]
print(id(b2)) #1426627342336
print(b3) #[1, 2, 3]
print(id(b3)) #1426627340352#python
值与地址相同:复制。
值相同地址不同:浅拷贝、深拷贝。
(2)改变原对象外层元素
import copy #使用copy中方法
a=[1,[2,3]]b1=a #复制,结果如下,值改变
b2=copy.copy(a) #浅拷贝,结果如下,值不变
b3=copy.deepcopy(a) #深拷贝,结果如下,值不变a.append(4) #外层加入元素“4”
print(a) #[1, [2, 3], 4]
print(b1) #[1, [2, 3], 4]
print(b2) #[1, [2, 3]]
print(b3) #[1, [2, 3]]#python
值改变:复制。
值不变:浅拷贝、深拷贝。
(3)改变原对象内层元素
import copy #使用copy中方法
a=[1,[2,3]]b1=a #复制,结果如下,值改变
b2=copy.copy(a) #浅拷贝,结果如下,值改变
b3=copy.deepcopy(a) #深拷贝,结果如下,值不变a[1].append(4) #内层加入元素“4”
print(a) #[[1, [2, 3, 4]]
print(b1) #[[1, [2, 3, 4]]
print(b2) #[[1, [2, 3, 4]]
print(b3) #[1, [2, 3]]#python
值改变:复制、浅拷贝。
值不变:深拷贝。
2022.11.02
初稿
复制、浅拷贝、深拷贝相关推荐
- python 深拷贝_详解python的复制,深拷贝和浅拷贝的区别
概述 今天主要来看看Python中的浅拷贝和深拷贝内容,这里用一个实例来说明~ 需求: 将一个列表的数据复制到另一个列表中. 思路: 使用列表[:],拿不准可以调用copy模块. 实现方法: #!/u ...
- Java基础—复制之深拷贝与浅拷贝
目录 一.浅拷贝(Shallow Copy) 二.深拷贝(Deep Copy) Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去 ...
- python复制列表元素_Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解...
Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值.复制.浅 ...
- python的复制,深拷贝和浅拷贝的区别
python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有 ...
- Interview:算法岗位面试—10.11下午—上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点、python的可变不可变的数据类型、赋值浅拷贝深拷贝区别
ML岗位面试:10.11下午-上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点.python的可变不可变的数据类型.赋值浅拷贝深拷贝区别 Interview:算法岗位 ...
- 浅显易懂的浅拷贝深拷贝来了
1.基本数据类型,引用数据类型 说起深拷贝浅拷贝,必须先说数据类型.在拷贝数据的时候才能看出真正差异. 基本数据类型: string,number,boolean,undefined,null, 基本 ...
- 一文搞懂JS中的赋值·浅拷贝·深拷贝
前言 为什么写拷贝这篇文章?同事有一天提到了拷贝,他说赋值就是一种浅拷贝方式,另一个同事说赋值和浅拷贝并不相同.我也有些疑惑,于是我去MDN搜一下拷贝相关内容,发现并没有关于拷贝的实质概念,没有办法只 ...
- NumPy快速入门--复制/视图/深拷贝
文章目录 1. 完全不复制 2. 视图或浅复制 3. 深拷贝 当计算和操作数组时,它们的数据有时被复制到新的数组中,有时不复制.对于初学者来说,这经常是一个混乱的来源.有三种情况: 1. 完全不复制 ...
- Clone方法与浅拷贝深拷贝
Clone方法与浅拷贝&深拷贝 介绍 如何实现 浅拷贝 shallow copy 深拷贝 deep copy 数组中的clone 介绍 在Java中,如果需要创建一个对象的副本,特别是这个对象 ...
- List复制:深拷贝和浅拷贝用法及区别
以下文章来源方志朋的博客,回复"666"获面试宝典 作者:DeMonnnnnn blog.csdn.net/demonliuhui/article/details/5457 ...
最新文章
- 脑机综述(一) | 脑机接口在康复医学中的应用进展
- Python学习笔记:开始Python编程
- python3.7下载包的命令_python3.7中安装paddleocr及paddlepaddle包的多种方法
- python绘制3d图-python3利用Axes3D库画3D模型图
- Js Array数组ES5/ES6常用方法
- deepin--更改最低亮度
- JZOJ 3852. 【NOIP2014八校联考第2场第2试9.28】单词接龙(words)
- mysql 分库分表架构与方案
- happens-before
- Java mail 发送邮件 主题(标题)乱码
- python 处理python编码的基本过程
- Android Studio中获取SHA1或MD5的方法
- YOLOv3目标检测有了TensorFlow实现,可用自己的数据来训练
- Photoshop画笔|设计师必备
- 服务器用netstat卡_PHP安全:服务器端口安全
- 安装eclipse的android adt 插件,eclipse安装ADT插件
- 网盘大战-各网盘使用测试
- python教程视频 网盘-Python学习路线2019版(课程大纲+视频教程+网盘资源下载)...
- 机器学习之深入理解K-means、与KNN算法区别及其代码实现
- TopCoder SRM 678 Div2
热门文章
- 学术期刊划分(SCI、EI、SSCI、IEEE、CSSCI等)
- 同元车辆模型库——TA系列
- java图形界面UI设计——简单的计算器
- MySQL命令行导出导入数据库和数据表
- shell-定时备份数据库发送至邮箱
- HTML <table>标签(表格)
- 大数据入门培训之大数据开发基础知识学习
- 【小程序】微信小程序如何获取用户微信openID?(已解决,完整代码实例)
- 2021年 江南大学研究生考试 算法与程序设计 题目
- 【亲测有效】如何解决Hadoop运行jar包 报错Exception in thread “main“ java.lang.ClassNotFoundException: /input