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

    深浅拷贝

    浅拷贝

    l1 = [1, 2, 3, [4, 5, 6]]
    print(l1)
    print(id(l1))
    print(l1[3])
    print(id(l1[3]))
    #l2是通过l1浅拷贝而来的
    l2 = l1.copy()
    l1[3][0] = 444
    print(l2)
    print(id(l2))
    print(l2[3])
    print(id(l2[3]))
    #最后打印在打印l1的内容,发现该列表中的值随着l2的改变也改变了
    print(l1)
    print(id(l1))
    #输出结果为
    [1, 2, 3, [4, 5, 6]]
    2799837795400
    [4, 5, 6]
    2799837794888
    [1, 2, 3, [444, 5, 6]]
    2799838353416
    [444, 5, 6]
    2799837794888
    [1, 2, 3, [444, 5, 6]]
    2799837795400
    #可以看出在浅拷贝中一个列表中的嵌套列表的值改变之后,另一个列表会相应的改变!因为它们嵌套的列表使用的是同一内存地址
    

    深拷贝

    在编写深拷贝程序时要用到deepcopy函数,但是需要引入copy模块!

    1、浅拷贝,除了顶层拷贝,还对子元素也进行了拷贝(本质上递归浅拷贝)
    2、经过深拷贝后,原始对象和拷贝对象所有的元素地址都没有相同的了

    #导入copy库
    import copy
    l1 = [1, 2, 3, [4, 5, 6]]
    print(l1)
    print(id(l1))
    print(l1[3])
    print(id(l1[3]))
    #l2是通过l1深拷贝而来的
    l2 = copy.deepcopy(l1)
    l2[3][0] = 444
    print(l2)
    print(id(l2))
    print(l2[3])
    print(id(l2[3]))
    #最后打印在打印l1的内容,发现该列表中的值并没有变化
    print(l1)
    print(id(l1))
    #输出的结果为
    [1, 2, 3, [4, 5, 6]]
    2418495986184
    [4, 5, 6]
    2418495986248
    [1, 2, 3, [444, 5, 6]]
    2418495986504
    [444, 5, 6]
    2418464576776
    [1, 2, 3, [4, 5, 6]]
    2418495986184
    #可以看出深拷贝和浅拷贝不一样之处在于对于嵌套的引用部分会独自分配内存!
    
  • 相关阅读:
    子组件 调用父组件方法
    加载进度条
    form 验证 自定义
    关于读取本地text文件,自动被添加空格的问题
    关于form表单中button按钮自动提交问题
    正态分布折线图/直方图相关方法以及概念
    大于0的数字(包含小数和整数)的正则表达式
    bigdecimal类型除法问题
    添加数据库的Maven依赖(SqlServer,Oracle)
    JS中null与undefined的区别
  • 原文地址:https://www.cnblogs.com/a736659557/p/11892333.html
Copyright © 2011-2022 走看看