python中浅拷贝和深拷贝分析
首先,我们知道Python3中,有6个标准的数据类型,他们又分为可以变和不可变。
- 不可变:Number(数字)、String(字符串)、Tuple(元组)。
- 可以变:List(列表)、Dictionary(字典)、Set(集合)。
一.浅拷贝
a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)
浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象;改变原始对象中为不可变类型的元素的值,不会响拷贝对象。
#定义一个列表,第一个元素是可变类型>>> A = [[1,2],'fei',90]#浅拷贝
>>> B = copy.copy(A)#对象地址是否相同
>>> A is B
False#第一个元素地址是否相同
>>> A[0] is B[0]
True#第二个元素地址是否相同
>>> A[1] is B[1]
True#改变第一个可变类型的值,查看复制对象变化
>>> A[0][0] = 2
>>> A
[[2, 2], 'fei', 90]#复制对象也跟着改变了
>>> B
[[2, 2], 'fei', 90]#改变第二个不可变类型的值,查看复制对象变化
>>> A[1] = 'anne'
>>> A
[[2, 2], 'anne', 90]#复制对象没有改变
>>> B
[[2, 2], 'fei', 90]
二.深拷贝
a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。
经过深拷贝后,原始对象和拷贝对象所有的可变元素地址都没有相同的了。
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#深拷贝
>>> C = copy.deepcopy(A)#对象地址是否相同
>>> A is C
False#第一个元素地址是否相同
>>> A[0] is C[0]
False#第二个元素地址是否相同
>>> A[1] is C[1]
True#改变第一个元素,查看复制元素变化
>>> A[0][0] = 2
>>> A
[[2, 2], 'fei', 90]#复制元素不变,对复制元素没影响
>>> C
[[1, 2], 'fei', 90]
#改变第二个元素,查看复制元素变化
>>> A[1] = 'Anne' >>> A[[2, 2], 'Anne', 90]
#复制元素不变,对复制元素没影响
>>> C[[1, 2], 'fei', 90]
在这里看到一个让我困惑的问题,A is B
三.赋值引用
a 和 b 都指向同一个对象
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#赋值引用
>>> A = [[1,2],'fei',90]
>>> D = A
#对象地址是否相同
>>> A is D
True
#第一个元素地址是否相同
>>> A[0] is D[0]
True
#第二个元素地址是否相同
>>> A[1] is D[1]
True
#改变A中第一个元素,查看是否影响D
>>> A[0][0] = 2
>>> A
[[2, 2], 'fei', 90]
#D中第一个元素也跟着改变
>>> D
[[2, 2], 'fei', 90]
#改变D中第二个元素,查看是否影响A
>>> D[1] = 'anne'
#A中第二个元素也改变了
>>> A
[[2, 2], 'anne', 90]
>>> D
[[2, 2], 'anne', 90]
>>>
python中浅拷贝和深拷贝分析相关推荐
- 对python中浅拷贝和深拷贝分析详细介绍
首先,我们知道Python3中,有6个标准的数据类型,他们又分为可以变和不可变. 不可变:Number(数字).String(字符串).Tuple(元组). 可以变:List(列表).Dictiona ...
- Python中浅拷贝和深拷贝的理解与研究
Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...
- python中浅拷贝和深拷贝的区别_Python中浅拷贝和深拷贝的区别
Python中浅拷贝和深拷贝的区别 浅拷贝和深拷贝示意图 如上图,简单点说 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝 ...
- Python中浅拷贝和深拷贝的理解与研究 1
Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...
- 彻底理解Python中浅拷贝和深拷贝的区别
目录 前言 1. 浅拷贝和深拷贝的概念 2. is和==的区别 3. 赋值操作 4. copy模块里面的copy()方法 5. copy模块里面的deepcopy()方法 6.字典自带的copy方法 ...
- python中浅拷贝与深拷贝
参考链接 1. 引用 https://blog.csdn.net/qq_38556217/article/details/103002827 2. Python中变量在内存的存储与地址变化详解(深浅拷 ...
- Python中浅拷贝与深拷贝的骚操作
作者:缪斯mius@阿里云Python训练营 博客地址:https://blog.csdn.net/m0_37759382/article/details/108489108 [例子]浅拷贝与深拷贝中 ...
- Python中浅拷贝和深拷贝的区别总结与理解
单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) # 内存地址相同a = [1,2] # ...
- python赋值浅拷贝和深拷贝的区别_python赋值、浅拷贝、深拷贝区别
在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题.所以,在这里按个人的理解谈谈它们之间的区别. 一.赋值(assignment) 在<Py ...
最新文章
- 用了 3 年 Apollo,最后我选择了 Nacos,原因不多说了
- Vue中bus的使用
- Mysql数据备份恢复及主从同步
- Redis持久化总结
- 离线安装python环境
- 鼠标onfocus或onblur效果
- laydate 周_宝来屋:5天168万!海盐周大生新店如何赢过竞品实现可持续化客流-广告随意贴...
- 链栈的基本操作和实现
- 计算机软件的英文简称,计算机常见英文缩写.docx
- CGAL 计算几何库
- Python3爬取搜狗微信公众号
- Unity 动态修改材质球
- AI虚拟教练助你练出人鱼线,揭秘Keep AI运动技术实力
- 基于Android的校园图书共享app
- ByVal和ByRef区别
- Windows杀死端口进程
- APP自动化测试(一)-appium
- win10一直正在检查更新_win10补丁KB4587587推送 win10预览版20236.1005更新内容汇总_windows10_Windows系列_操作系统...
- [CVE-2021-1732] win32k内核提权漏洞分析
- 【Codeforces Round #565 (Div. 3) A B C D E F】解题报告