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
    深拷贝

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

  • 相关阅读:
    常用Dos 命令
    Expect: 100continue
    Sql Server 文件和文件组体系结构
    Build Action
    regasm.exe 程序集注册工具
    获得user account的SID,GUID
    sp_change_users_login
    Regsvr32
    ASP.NET IIS 注册工具 (Aspnet_regiis.exe)
    随机生成300道四则运算
  • 原文地址:https://www.cnblogs.com/pscly/p/11650035.html
Copyright © 2011-2022 走看看