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
    #可以看出深拷贝和浅拷贝不一样之处在于对于嵌套的引用部分会独自分配内存!
    
  • 相关阅读:
    onkeyup事件
    asp.net学习视频资料地址链接
    企业站新闻信息的后台功能开发心得(1)
    js实现切换导航
    jquery实现上拉加载更多
    css设置input框没有边框,选中时取消背景色
    使用js修改url地址参数
    ubantu 修改hosts文件
    git的使用
    ubantu 16.04 菜单栏的位置变换
  • 原文地址:https://www.cnblogs.com/a736659557/p/11892333.html
Copyright © 2011-2022 走看看