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

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

  • 相关阅读:
    symbol
    es6的对象新增的方法
    关于一个有趣的知识
    我为什么要记笔记?
    学习 yjango 博士的学习方法后的总结
    关于写博客的好处
    这是一片博客的测试
    【牛客19】(思路)
    【HDOJ】find your present (2)(思路题)
    【素数】Eratosthenes筛选
  • 原文地址:https://www.cnblogs.com/pscly/p/11650035.html
Copyright © 2011-2022 走看看