zoukankan      html  css  js  c++  java
  • python深浅拷贝简介

    我们这里要运用一个模块 copy

    copy.copy 是浅拷贝

    copy.deepcopy 是深拷贝

     

    他们在拷贝不可变类型的时候作用都是相同的(拷贝到的是内存地址)

    下面写的都是在拷贝可变类型的情况,这里我用的是列表类型

    浅拷贝:

    这个是把目标内部的指向内存地址拷过去

    import copy
    
    d1 = [1, 2]
    d3 = copy.copy(d1)           # 这句话是进行浅拷贝
    
    
    print(d1, id(d1))                # 查看d1的值和它的内存地址
    print(d3, id(d3))                # 查看d3的值和它的内存地址
    
    
    >>>
    [1, 2] 2644535077896
    [1, 2] 2644535254408
    浅拷贝

     

    浅拷贝也会出现一个问题,就是拷贝的可变类型(如列表), 是会随着对被拷贝的操作改变而改变的

    import copy
    
    d1 = [1, 2, [3, 4]]
    d3 = copy.copy(d1)
    
    
    
    d1[2][0] = 4                # 这里是在修改原来的
    print(d1, id(d1[-1]))     # 这个是原来的
    print(d3, id(d3[-1]))     # 这个是拷贝的
    
    >>>
    [1, 2, [4, 4, [5, 6]]] 1645661545096
    [1, 2, [4, 4, [5, 6]]] 1645661545096
    浅拷贝的问题1

      如果要解决这个问题的话就得用到深拷贝了

      

    深拷贝:

     深拷贝就会把可变类型的东西都拿出来,和原来的隔开

    import copy
    
    d1 = [1, 2, [3, 4]]
    
    d4 = copy.deepcopy(d1)     # 使用深拷贝
    
    print(d1, id(d1[-1]))
    print(d4, id(d4[-1]))
    
    >>>
    [1, 2, [4, 4]] 1996035809928
    [1, 2, [3, 4]] 1996055747208
    深拷贝

      如果可变类型中又有一个可变类型,那么他会迭代操作

  • 相关阅读:
    Aircrack-ng破解无线WIFI密码
    隐写术
    数据链路层协议(Ethernet、IEEE802.3、PPP、HDLC)
    OSI七层模型
    异步访问技术Ajax(XMLHttpRequest)
    XML / HTML / XHTML 的区别
    字符集与字符编码
    密码学(对称与非对称加密 哈希算法)
    渗透测试之信息收集
    OWASP-ZAP扫描器的使用
  • 原文地址:https://www.cnblogs.com/pscly/p/11650035.html
Copyright © 2011-2022 走看看