Python复制——浅拷贝、深拷贝、切片
来源:互联网 发布:linux ping大包命令 编辑:程序博客网 时间:2024/05/17 21:45
Python复制——浅拷贝和深拷贝
环境:python3.5
新增:我发现一个有趣的现象:
打印函数
#为减少代码量,方便阅读,定义打印函数def printab(a,b): print(a) print(b) print(id(a)) print(id(b))
切片复制
a=[1,2,3,['a','b','c'],4]
b=a[:]printab(a,b)b[3].append('s')printab(a,b)
结果:
[1, 2, 3, ['a', 'b', 'c'], 4][1, 2, 3, ['a', 'b', 'c'], 4]29670549347282967054981064[1, 2, 3, ['a', 'b', 'c', 's'], 4][1, 2, 3, ['a', 'b', 'c', 's'], 4]29670549347282967054981064
浅拷贝
浅拷贝可以理解为重命名,所以指向同一内存地址
举例: a=[1,2,3,['a','b','c'],4]
b=aprintab(a,b)a.append(5)printab(a,b)b.append(6)printab(a,b)
结果:
[1, 2, 3, ['a', 'b', 'c'], 4][1, 2, 3, ['a', 'b', 'c'], 4]24963544112082496354411208[1, 2, 3, ['a', 'b', 'c'], 4, 5][1, 2, 3, ['a', 'b', 'c'], 4, 5]24963544112082496354411208[1, 2, 3, ['a', 'b', 'c'], 4, 5, 6][1, 2, 3, ['a', 'b', 'c'], 4, 5, 6]24963544112082496354411208
显然可以理解,C++和python在拷贝方面的区别,python只是重命名。
较深拷贝
使用copy(),可以实现较深拷贝,但需注意较深拷贝和深拷贝的本质区别。
举例: a=[1,2,3,['a','b','c'],4]
b=a.copy()b.append(7)printab(a,b)
结果:
[1, 2, 3, ['a', 'b', 'c'], 4][1, 2, 3, ['a', 'b', 'c'], 4, 7]25496847244242549684770760
但是,如果存在可变元素如tuple或dist,则该元素仍为重命名
举例: a=[1,2,3,['a','b','c'],4]
b=a.copy()a[3].append('d')printab(a[3],b[3])printab(a,b)
结果:
['a', 'b', 'c', 'd']['a', 'b', 'c', 'd']19895187793361989518779336[1, 2, 3, ['a', 'b', 'c', 'd'], 4][1, 2, 3, ['a', 'b', 'c', 'd'], 4]19895203519441989520398280
可以看到,a[3]-b[3]同一地址,即可变元素仍为重命名,哪怕之前b已经添加元素’7’!!
注意和切片复制对比,使用copy()本质上就是切片复制!!!!
于是相应地,出现深拷贝
使用deepcopy(),则实现完全拷贝
举例:
import copyb=copy.deepcopy(a)a[3].append('f')printab(a[3],b[3])printab(a,b)
结果:
['a', 'b', 'c', 'f']['a', 'b', 'c']20321306142162032131184392[1, 2, 3, ['a', 'b', 'c', 'f'], 4][1, 2, 3, ['a', 'b', 'c'], 4]20321311382482032131175560
结果显而易见。
如果读者有收获或者有问题,欢迎点赞或者评论,谢谢。 python群:190341254丁。
阅读全文
0 0
- Python复制——浅拷贝、深拷贝、切片
- Python的切片操作是深拷贝还是浅拷贝?
- python中的复制 浅拷贝 深拷贝
- python复制,浅拷贝,深拷贝理解
- Python对象拷贝——深拷贝与浅拷贝
- Python 深复制浅复制or深拷贝浅拷贝
- Python深复制浅复制or深拷贝浅拷贝
- Python深复制浅复制or深拷贝浅拷贝
- Python深复制浅复制or深拷贝浅拷贝
- Python深复制浅复制or深拷贝浅拷贝
- Python复制的问题——浅拷贝和深拷贝
- python列表复制(浅拷贝and深拷贝)
- python字典复制(浅拷贝and深拷贝)
- python的复制,深拷贝和浅拷贝
- python学习笔记——浅拷贝与深拷贝
- python之路——深拷贝与浅拷贝
- Python学习笔记——深拷贝与浅拷贝
- Python —— 深拷贝 VS 浅拷贝
- openwrt源速度差的解决办法【转】
- 记录一次Android信鸽推送,跳到指定Activity
- Java集合类学习之Arraylist、Linkedlist
- 网络判断2g3g4g
- LeetCode-75-Sort Colors 水题
- Python复制——浅拷贝、深拷贝、切片
- 图文混排
- 控制流源码break.py运行遇到的问题
- 将数据写入到Map中
- 清除缓存
- ElasticSearch5.6.1环境搭建与运行
- eclipse导入JDK源码
- spring之bean管理-----注解
- 侧滑+Tablayout+banner+pulltorefresh+多条目+获取网络图片