首页 > 编程语言 > 详细

python标准库--copy模块

时间:2021-05-03 18:44:29      阅读:34      评论:0      收藏:0      [点我收藏+]

copy模块简介

  • copy模块:Python中的赋值语句不复制对象,它们在目标和对象之间创建绑定。对于可变或包含可变项的集合,有时需要一个副本,以便可以更改一个副本而不更改另一个副本。这个模块提供了一般的浅层和深层复制操作。

    • copy模块是python内建模块,只需要使用import语句导入即可:import copy

copy模块的方法

浅层复制

  • 浅层复制:

    • 浅拷贝实现:copy.copy(),工厂方法,[:]

    • 浅拷贝会创建新对象,其内容是原对象的引用。

    • 浅拷贝只拷贝父对象,不会拷贝父对象的内部子对象,对父对象的再次修改,不会影响浅拷贝结果,对子对象的再次更改,会影响浅拷贝的结果。

    import copy
    list_copy = [1,2,{1,2,3,4},4,5]
    list_copy1 = copy.copy(list_copy)
    print(list_copy,id(list_copy),‘<>‘,list_copy1,id(list_copy1))
    # [1, 2, {1, 2, 3, 4}, 4, 5] 41050760 <> [1, 2, {1, 2, 3, 4}, 4, 5] 41145800
    ‘‘‘结论:浅拷贝会创建新对象,其内容是原对象的引用。‘‘‘
    ?
    # 修改原对象外层
    list_copy[1] = 20
    print(list_copy,"<>",list_copy1)
    # [1, 20, {1, 2, 3, 4}, 4, 5] <> [1, 2, {1, 2, 3, 4}, 4, 5]
    ‘‘‘结论:修改原对象外层对象不会对浅拷贝对象产生影响‘‘‘
    ?
    # 修改原对象内层
    list_copy[2].add(30)
    print(list_copy,"<>",list_copy1)
    # [1, 20, {1, 2, 3, 4, 30}, 4, 5] <> [1, 2, {1, 2, 3, 4, 30}, 4, 5]
    ‘‘‘结论:修改原对象内层对象会对浅拷贝对象产生影响‘‘‘
    ?
    # 修改浅拷贝外层
    list_copy1.append(100)
    print(list_copy,"<>",list_copy1)
    # [1, 20, {1, 2, 3, 4, 30}, 4, 5] [1, 2, {1, 2, 3, 4, 30}, 4, 5, 100]
    ‘‘‘结论:修改浅拷贝外层对象不会影响原对象‘‘‘
    ?
    # 修改浅拷贝内层
    list_copy1[2].add(100)
    print(list_copy,"<>",list_copy1)
    # [1, 20, {1, 2, 3, 4, 100, 30}, 4, 5] <> [1, 2, {1, 2, 3, 4, 100, 30}, 4, 5, 100]
    ‘‘‘结论:修改浅拷贝内层对象会影响原对象‘‘‘

深层复制

  • 深层复制:

    • 深拷贝实现:copy.deepcopy()

    • 深拷贝会创建新对象,其内容是原对象的引用

    • 深拷贝会拷贝父对象,也会拷贝父对象内部子对象:

      • 对父对象或者子对象的更改,不影响浅拷贝结果。

    import copy
    list_deepcopy = [1,2,{1,2,3,4},4,5]
    list_deepcopy1 = copy.deepcopy(list_deepcopy)
    print(list_deepcopy,id(list_deepcopy),‘<>‘,list_deepcopy1,id(list_deepcopy1))
    # [1, 2, {1, 2, 3, 4}, 4, 5] 40198792 <> [1, 2, {1, 2, 3, 4}, 4, 5] 40293832
    ‘‘‘结论:深拷贝会创建新对象,其内容是原对象的引用。‘‘‘
    ?
    # 修改原对象外层
    list_deepcopy[1] = 20
    print(list_deepcopy,"<>",list_deepcopy1)
    # [1, 20, {1, 2, 3, 4}, 4, 5] <> [1, 2, {1, 2, 3, 4}, 4, 5]
    ‘‘‘结论:修改原对象外层对象 不会 对深拷贝对象产生影响‘‘‘
    ?
    # 修改原对象内层
    list_deepcopy[2].add(30)
    print(list_deepcopy,"<>",list_deepcopy1)
    # [1, 20, {1, 2, 3, 4, 30}, 4, 5] <> [1, 2, {1, 2, 3, 4}, 4, 5]
    ‘‘‘结论:修改原对象内层对象 不会 对深拷贝对象产生影响‘‘‘
    ?
    ?
    list_deepcopy1.append(100)
    print(list_deepcopy,"<>",list_deepcopy1)
    # [1, 20, {1, 2, 3, 4, 30}, 4, 5] <> [1, 2, {1, 2, 3, 4}, 4, 5, 100]
    ‘‘‘结论:修改浅拷贝外层对象 不会 影响原对象‘‘‘
    ?
    list_deepcopy1[2].add(100)
    print(list_deepcopy,"<>",list_deepcopy1)
    # [1, 20, {1, 2, 3, 4, 30}, 4, 5] <> [1, 2, {1, 2, 3, 100, 4}, 4, 5, 100]
    ‘‘‘结论:修改浅拷贝内层对象 不会 影响原对象‘‘‘
    ?
    ‘‘‘总结:深拷贝会创建新对象,其内容是原对象的引用;深拷贝拷贝了原对象的所有对象,包括嵌套对象‘‘‘

     

python标准库--copy模块

原文:https://www.cnblogs.com/bright-future/p/14727602.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!