Python复制的问题——浅拷贝和深拷贝
来源:互联网 发布:林原惠美 知乎 编辑:程序博客网 时间:2024/06/05 07:46
Python复制——浅拷贝和深拷贝
环境:python3.5
浅拷贝
浅拷贝可以理解为重命名,所以指向同意内存地址
举例:
a=[1,2,3,['a','b','c'],4]b=aprint(id(b))print(id(a))a.append(5)print(a)print(b)b.append(6)print(a)print(b)print(id(a))print(id(b))
结果:
39758483975848[1, 2, 3, ['a', 'b', 'c'], 4, 5][1, 2, 3, ['a', 'b', 'c'], 4, 5][1, 2, 3, ['a', 'b', 'c'], 4, 5, 6][1, 2, 3, ['a', 'b', 'c'], 4, 5, 6]39758483975848
显然可以理解,C++和python在拷贝方面的区别,python只是重命名。
较深拷贝
使用copy(),可以实现较深拷贝,但需注意较深拷贝和深拷贝的本质区别。
举例:
b=a.copy()b.append(7)print(a)print(b)print(id(a))print(id(b))
结果:
[1, 2, 3, ['a', 'b', 'c'], 4, 5, 6][1, 2, 3, ['a', 'b', 'c'], 4, 5, 6, 7]84978328498192
但是,如果存在可变元素如tuple或dist,则该元素仍为重命名
举例:
a[3].append('d')print(id(a[3]))print(id(b[3]))print(a)print(b)print(id(a))print(id(b))
结果:
1765640817656408[1, 2, 3, ['a', 'b', 'c', 'd'], 4, 5, 6][1, 2, 3, ['a', 'b', 'c', 'd'], 4, 5, 6, 7]1767287217673232
可以看到,a[3]-b[3]同一地址,即可变元素仍为重命名,哪怕之前b已经添加元素’7’!!
于是相应地,出现深拷贝
使用deepcopy(),则实现完全拷贝
举例:
import copyb=copy.deepcopy(a)a[3].append('f')print(id(b[3]))print(id(a[3]))print(a)print(b)
结果:
1792376817656408[1, 2, 3, ['a', 'b', 'c', 'd', 'f'], 4, 5, 6][1, 2, 3, ['a', 'b', 'c', 'd'], 4, 5, 6]
结果显而易见。
如果读者有收获或者有问题,欢迎点赞或者评论,谢谢。
python群:190341254
丁。
阅读全文
0 0
- Python复制的问题——浅拷贝和深拷贝
- python的复制,深拷贝和浅拷贝
- 初探python对象复制问题的深拷贝和浅拷贝
- Python复制——浅拷贝、深拷贝、切片
- Python中字典的浅拷贝和深拷贝问题
- python 的深拷贝和浅拷贝
- Python的浅拷贝和深拷贝
- Python的浅拷贝和深拷贝
- Python的浅拷贝和深拷贝
- python的浅拷贝和深拷贝
- Python 的深拷贝 和 浅拷贝
- Python对象的拷贝,浅拷贝和深拷贝。
- python中的复制 浅拷贝 深拷贝
- python复制,浅拷贝,深拷贝理解
- 关于数组的复制问题------浅拷贝,深拷贝
- 复制对象 和 浅拷贝,深拷贝
- 复制构造函数的浅拷贝和深拷贝
- python知识点(三):复制(引用、拷贝、浅拷贝和深拷贝)
- Billboard
- 好的开始意味成功的一半?!
- cocos2dx跨平台游戏PoetryInGame
- FreeRTOS 基础简介
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- Python复制的问题——浅拷贝和深拷贝
- Python 基于Tkinter的GUI图形界面学习
- 【数据挖掘知识点三】大数定理与中心极限定理
- 我的python回测系统创建之路(1)
- JSP面试题及答案
- 1083:十->二进制转换
- scala模式匹配·
- saltstack--批量安装nginx
- c++中虚表指针与虚函数详解