python中深拷贝与浅拷贝的区别
####################python中的数据类型####################### ##########python中的数据类型有6种,分别为:数字类型如int,float、字符串类型、列表类型(list)、元组类型(tuple)、集合类型(set)、字典类型(dict)。其中数字类型&字符串&元组类型是不可变类型,list&set&dict是可变类型。 ########深拷贝与浅拷贝的区别,python中copy.copy()实现浅拷贝,copy.deepcopy()实现深拷贝。深浅拷贝的实现主要和内存有关############## ########深拷贝与浅拷贝都是拷贝了一个看起来相同的对象,但是本质区别是拷贝出来的对象的中的可变元素的地址是否和原对象一样############### ########深拷贝:拷贝了一份与原对象地址不同的对象,原对象的值如何改变都不会影响深拷贝后的对象的值。通俗的举例:深拷贝相当于一对双胞胎,A与B虽然长的极其相似但是A与B是不同的两个人,A的操作完全不影响B ########浅拷贝:拷贝了一份原对象中的各元素的地址与值,即只要原对象中可变元素发生改变,那么浅拷贝对象的值也会发生改变。通俗的举例:某人有中英文两个名,那么中文名干了某事代表英文名也干了这件事。 ########对于不可变类型的对象(数字、字符串、元组),浅拷贝与深拷贝的结果并无区别,即深拷贝或浅拷贝后的对象的地址与值完全一样。如下所示######################### print("########################对于不可变类型对象只有深拷贝没有浅拷贝####################") import copy a="hello world" c=copy.deepcopy(a) print(id(a)) print(id(c)) a+=" !!!"####a发生改变后地址也发生改变 print(a) print(c) print(id(a)) ########对于可变类型的对象(list&set&dict),分为两种情况。情况1:可变类型对象中的元素都是非可变类型的,例如:[1,2,3,4,5];情况2:可变类型对象中的元素包含可变类型,例如[1,2,3,[4,5]]########## ########对于情况1:原对象的地址!=浅拷贝对象的地址!=深拷贝对象的地址但是原对象中各元素的地址==浅拷贝对象中各元素的地址==深拷贝对象中各元素的地址######################## #######如果对原对象进行操作,不影响浅拷贝和深拷贝的对象#################### print("#####################对于元素都为不可变类型的可变类型的对象的浅拷贝与深拷贝################") d=[1,2,3] e=copy.copy(d) f=copy.deepcopy(d) print(id(d)) print(id(e)) print(id(f)) ls_d=[id(i) for i in d] ls_e=[id(i) for i in e] ls_f=[id(i) for i in f] print(ls_d) print(ls_e) print(ls_f) d.append(5) print(d,e,f) #######对于情况2:原对象地址!=浅拷贝对象地址!=深拷贝对象地址但是【原对象中不可变元素的地址==浅拷贝对象中不可变元素的地址==深拷贝对象中不可变元素的地址】&&【原对象中可变元素的地址==浅拷贝对象中可变元素的地址!=深拷贝对象中的地址】 print("##################对于元素中有可变类型的对象的浅拷贝与深拷贝#####################################") h=[1,2,3,[4,5,6]] m=copy.copy(h) n=copy.deepcopy(h) print(id(h)) print(id(m)) print(id(n)) ls_h=[id(i) for i in h] ls_m=[id(i) for i in m] ls_n=[id(i) for i in n] print(ls_h) print(ls_m) print(ls_n) h.append(7) h[3].append(9) print(h) print(m) print(n) 详见:Python浅拷贝与深拷贝的区别_万wu皆可爱的博客-CSDN博客_python深拷贝和浅拷贝的区别
python中深拷贝与浅拷贝的区别相关推荐
- Python中深拷贝与浅拷贝的区别?
往期面试题: 列举Python中的标准异常类? 说说Python面向对象三大特性? 说说Python中有几种数据类型? 说说Python模块主要分哪三类? 废话不多说,开始今天的题目: 问:说说Pyt ...
- python中深拷贝和浅拷贝_**Python中的深拷贝和浅拷贝详解
甚至连type其本身都是对象,type对象 Python中变量与C/C++/Java中不同,它是指对象的引用,Python是动态类型,程序运行时候,会根据对象的类型 来确认变量到底是什么类型. 单独赋 ...
- 浅析Python中深拷贝和浅拷贝
按照以下不同情况,在IDE中逐个解除注释,就明白了 import copy""" 第一种情况,不可变类型变量,都是引用 """ # a = ...
- python中深拷贝和浅拷贝
转载于:https://www.cnblogs.com/mihoutao/p/10955858.html
- Python基础:对象的深拷贝和浅拷贝的区别
Python基础:对象的深拷贝和浅拷贝的区别 1 变量与对象 2 不可变对象与可变对象 3 直接赋值 4 浅拷贝 5 深拷贝 参考文献 1 变量与对象 对象:内存中存储数据的实体,有明确的类型.在Py ...
- python 深拷贝_详解python的复制,深拷贝和浅拷贝的区别
概述 今天主要来看看Python中的浅拷贝和深拷贝内容,这里用一个实例来说明~ 需求: 将一个列表的数据复制到另一个列表中. 思路: 使用列表[:],拿不准可以调用copy模块. 实现方法: #!/u ...
- python的复制,深拷贝和浅拷贝的区别
python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有 ...
- Python中 list[:]与 list 的区别
Python中 list[:] 与 list 的区别 最近leetcode刷题的时候,总是碰到最后返回的结果是[[],[],[]-[]]这样的形式,就是说列表中的元素也是列表,我们假设外面的大列表为r ...
- 【从零学Python】深拷贝和浅拷贝、二维数组初始化
Python 的深拷贝和浅拷贝 直接赋值: 其实就是对象的引用(别名). 浅拷贝(copy): 拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 deepcop ...
最新文章
- 关于明年减半——BCH将会暴涨还是暴跌?矿工如何应对?
- 22. Generate Parentheses
- RabbitMQ延时队列原理讲解
- linux编译准备,Linux 下编译指南
- C#最佳工具集合:IDE、分析、自动化工具等
- Linux java 生效不了,linux jdk 不生效怎么办
- python快速接手别人的代码_十步教你如何接手别人的代码!
- 百度地图开发只显示网格不显示地图信息
- 一台服务器装两个sql server_超详细的centos7部署zabbix监控服务器教程分享
- 隐马尔可夫模型HMM(一)
- 职场江湖 告诉你如何八面玲珑
- 软件测试团队口号及队名,团队口号及霸气队名
- perl脚本基础总结(转)
- 图片在section上下居中_给0~1岁的新媒体人:公众号怎么配图?免费图片哪里找?...
- Threejs实现模拟管道液体流动
- 蓝牙mesh中的TTL解读
- 输入身份证号获取信息
- Android解码视频每一帧,Android 获取视频缩略图(获取视频每帧数据)的优化方案
- 20181021模拟赛(暴力+暴力+优先队列二分)
- 小米扫地机器人 设置虚拟墙_米家扫地机器人可以设置虚拟墙吗