• Python中的深拷贝和浅拷贝


       有一次,在帮师兄做题的时候,调一个bug始终没有调通,后来几经波折,终于有了结果。现在将其中的坑,share出来。其实主要是对python中的深拷贝和浅拷贝理解出现了偏差导致的。

      Python中自带了一个copy模块,这个模块用来执行深拷贝和浅拷贝。

       浅拷贝:

    l1 = [1,2,3,4]
    l2 = l1    # l2引用l1, 实际都指向同一个对象
    print(l2)
    # [1, 2, 3, 4]
    l1[0] = 99 # 对l2的操作就是对l1的操作
    print(l1)
    # [99, 2, 3, 4]
    print(l2)
    # [99, 2, 3, 4]
    
    ######################
    from copy import copy
    l1 = [1, 2, [3, 4]]  # 对象中包含对象
    l2 = copy(l1)
    print(l2)
    # [1, 2, [3, 4]]
    print(l1)
    # [1, 2, [3, 4]]
    l2[2][0] = 99
    print(l1)
    # [1, 2, [99, 4]]
    print(l2)
    # [1, 2, [99, 4]]
    l1[1] = 88
    print(l1)
    # [1, 88, [99, 4]]
    print(l2)
    # [1, 2, [99, 4]]

                  

       

      深拷贝:

    from copy import deepcopy
    l1 = [1, 2, 3, 4]
    l2 = deepcopy(l1) # l2指向l1一样的新对象
    print(l2)
    # [1, 2, 3, 4]
    l2[0] = 99    # 对l2的操作不会影响到l1
    print(l1)
    # [1, 2, 3, 4]
    print(l2)
    # [99, 2, 3, 4]

            

    Python中对list的拷贝:

    一:非常奇怪的语法

    new_list = old_list[:]

    二:内建list()函数

    new_list = list(old_list)

    三:copy

    这个要比list()慢一点,因为它要找到old_list的类型

    import copy
    new_list = copy.copy(old_list)

    四:最慢和最消耗内存的方法,但是有时是必须的

    import copy
    new_list = copy.deepcopy(old_list)
  • 相关阅读:
    rsync服务器与客户端配置文件
    0170001799 SQL Parsing Messages .
    RHEL修改最大文件打开数,关于epoll socket Too many open files问题的解决
    精美网页集锦
    Linux 相关发音
    【转】如何提升工作中的影响力
    2010年50大最佳工作场所 谷歌仅排名第14
    加密解密工具gpg (GnuPG)
    【转】易经与软件开发
    常见的开放源代码许可证类型
  • 原文地址:https://www.cnblogs.com/brainstorming/p/7657949.html
Copyright © 2020-2023  润新知