Python里面如何拷贝一个对象
2024-08-21 02:13:47
1.赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
In [168]: a
Out[168]: [1, 2, 3] In [169]: b=a In [170]: a.append(4) In [171]: a
Out[171]: [1, 2, 3, 4] In [172]: b
Out[172]: [1, 2, 3, 4]
2.浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(copy模块的copy()函数)
In [187]: import copy#copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变 In [188]: a=[1,2,3,4,['a','b']] In [189]: c=copy.copy(a) In [190]: a.append(5) In [191]: a
Out[191]: [1, 2, 3, 4, ['a', 'b'], 5] In [192]: c
Out[192]: [1, 2, 3, 4, ['a', 'b']] In [193]: a[4].append('c') In [194]: a
Out[194]: [1, 2, 3, 4, ['a', 'b', 'c'], 5] In [195]: c
Out[195]: [1, 2, 3, 4, ['a', 'b', 'c']]
3.深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变)(copy模块的deep.deepcopy()函数)
In [196]: import copy In [197]: a=[1,2,3,4,['a','b']] In [198]: c=copy.deepcopy(a) In [199]: a.append(5) In [200]: a
Out[200]: [1, 2, 3, 4, ['a', 'b'], 5] In [201]: c
Out[201]: [1, 2, 3, 4, ['a', 'b']] In [202]: a[4].append('c') In [203]: a
Out[203]: [1, 2, 3, 4, ['a', 'b', 'c'], 5] In [204]: c
Out[204]: [1, 2, 3, 4, ['a', 'b']]
综上所述,浅copy和深copy:
copy浅拷贝(copy.copy()),没有拷贝子对象,所以原始数据改变,子对象会改变
深copy的相同在于(copy.deepcopy()),包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
它们的相同之处是,父对象都没有改变!
最新文章
- java.lang.Class.isAssignableFrom()用法解析
- Spring 01基础
- 【bzoj1023】仙人掌图
- 一行代码设置TLabel.Caption的前世今生
- Qt之QNetworkInterface
- Balloon Comes!
- LINQ里的Distinct()
- 将json格式日期(毫秒数)转成日常日期格式和日常格式时间对比
- Delphi中TFlowPanel实现滚动条效果
- CSS3 transform制作的漂亮的滚动式导航
- Unity3D开发必备神器(Visual Studio Tools for Unity)
- SDN理解:云数据中心底层网络架构
- phpcms推荐位数据库字段详解
- 编码中的setCharacterEncoding 理解<;转自-fancychendong>;
- javascript 正则表达式学习教程
- Word巧用大纲视图 快速重排版面
- 架构之ELK日志分析系统
- Springboot中如何在Utils类中使用@Autowired注入bean
- 深入剖析GPU Early Z优化
- Spring Boot自动配置原理、实战