写点什么

软件测试 / 测试开发丨 Python 深拷贝与浅拷贝

作者:测试人
  • 2023-09-08
    北京
  • 本文字数:839 字

    阅读完需:约 3 分钟

免费领取:测试资料+测试用例+简历模板+测试文档

本文为霍格沃兹测试开发学社学员学习笔记分享原文链接:pycharm常用快捷键。深拷贝与浅拷贝 - 学习笔记 - 测试人社区

深拷贝与浅拷贝

  • 浅拷贝:有 4 中实现方法:对象本身的 copy 方法,工厂方法,切片以及 copy 模块的 copy 方法。对容器类型复杂数据结构,只拷贝第一层引用,拷贝效率快,内存占用少如果不涉及数据独立性的话,都用浅拷贝。


import copy
# 原始数据originData = [[1,2],{"name":"Tom", "chars":["A","B"]}]
# 使用对象的copy()方法得到浅拷贝对象copyData1 = originData.copy()# 使用工厂方法获取浅拷贝对象copyData2 = list(originData)# 使用切片方式获取浅拷贝对象copyData3 = originData[:]# 使用 copy模块中的copy方法获取浅拷贝对象copyData4 = copy.copy(originData)
# 拷贝成功的验证,内容相同,地址不同# 查看所有对象内容print(originData)print(copyData1)print(copyData2)print(copyData3)print(copyData4)# 查看所有对象的址,print(id(originData))print(id(copyData1))print(id(copyData2))print(id(copyData3))print(id(copyData4))
# 当修改任意对象时,其它对象都会受影响copyData3[1]["chars"][1] = "BBB"
# 查看所有对象的数据print(originData)print(copyData1)print(copyData2)print(copyData3)print(copyData4)
复制代码
  • 深拷贝:需要数据独立性,修改复制出来或者原始数据的时候,其他数据不会随之改变


import copy
# 原始数据originData = [[1,2],{"name":"Tom", "chars":["A","B"]}]
# 使用 copy模块中的deepcopy方法获取深拷贝对象deepCopyData = copy.deepcopy(originData)
# 拷贝成功的验证,内容相同,地址不同# 查看所有对象内容print(originData)print(deepCopyData)
# 查看所有对象的址,print(id(originData))print(id(deepCopyData))

# 当修改任意对象时,其它对象不会受影响originData[1]["chars"][1] = "BBB"
# 查看所有对象的数据print(originData)print(deepCopyData)
复制代码


发布于: 刚刚阅读数: 2
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨Python 深拷贝与浅拷贝_Python_测试人_InfoQ写作社区