软件测试 / 测试开发丨 Python 深拷贝与浅拷贝 学习笔记
免费领取:测试资料+测试用例+简历模板+测试文档
本文为霍格沃兹测试开发学社学员学习笔记分享
深拷贝与浅拷贝
1、什么是拷贝
拷贝是指使用一个已存在一个对象,生成一个新的对象,两个对象在内存中具有独立的存储空间。
2、浅拷贝
浅拷贝是指是创建一个新的对象时,只拷贝内容是原始对象的引用,而不是创建原始对象的副本数据。
浅拷贝不具有数据独立性,对象的 copy() 方法,copy 模块的 copy() 方法,工厂方法,切片等方式得到的都是浅拷贝对象。
使用对象的 copy()方法得到浅拷贝对象;
使用工厂方法获取浅拷贝对象;
使用切片方式获取浅拷贝对象;
使用 copy 模块中的 copy 方法获取浅拷贝对象;
3、深拷贝
深拷贝是指创建一个新的对象,并递归地复制原始对象及其所有嵌套对象的内容,而不仅仅是复制它们的引用。
深拷贝具有数据独立性,使用 copy 模块中的 deepcopy() 方法实现深拷贝。
4、浅拷贝与深拷贝区别
相同点:内容相同,地址不同:都是重新生成一个新内存地址的数据;
不同点:
1、数据对立性不一样:
浅拷贝:不具有数据独立性,当修改任意对象时,其它对象都会受影响;
深拷贝:具有数据独立性,当修改任意对象时,其它对象都不会受影响;
2、实现方式不一样:
浅拷贝:
使用对象的 copy()方法得到浅拷贝对象;
使用工厂方法获取浅拷贝对象;
使用切片方式获取浅拷贝对象;
使用 copy 模块中的 copy 方法获取浅拷贝对象;
深拷贝:使用 copy 模块中的 deepcopy() 方法实现深拷贝;
5、说明:
程序的大部分场景都使用浅拷贝。
浅拷贝,深拷贝特指容器类型保存的复杂结构,对于基本类型的数据,都是引用指向(不在缓存池中的字符串对像除外)。
类似公共排序方法 sorted() 实现就可以使用深拷贝,因为该方法返回一个排序后的新列表,该列表可能在程序其它位置被修改,避免影响原列表,深拷贝更适合。
版权声明: 本文为 InfoQ 作者【测试人】的原创文章。
原文链接:【http://xie.infoq.cn/article/abc2ea2d935a28309aadd50e8】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论