zoukankan      html  css  js  c++  java
  • Python之深浅拷贝详解

    1、浅拷贝原理

    浅拷贝解释:

      是把原列表第一层的内存地址拷贝一份给新列表。对于不可变类型拷贝本身id内存地址给新列表(原列表修改不可变类型的值,新列表不会变),对于可变类型是拷贝可变类型容器本身的id给新列表(原列表修改其中内嵌可变类型的元素值,新列表也会变)

    原理图:

     实例:

    list=['jesse','zhangsan',['786', '2.23']]
    list1=list.copy()
    print(list)
    print(list1)
    print("原列表id:",id(list))
    print("拷贝的列表id:",id(list1))
    print("原列表内嵌列表id:",id(list[2]))
    print("拷贝的列表内嵌列表id:",id(list1[2]))
    list[0]='jc'
    list[2][0]='yuanyuan'
    print(list)
    print(list1)
    print("原列表id:",id(list))
    print("拷贝的列表id:",id(list1))
    print("原列表内嵌列表id:",id(list[2]))
    print("拷贝的列表内嵌列表id:",id(list1[2]))
    # 执行结果
    ['jesse', 'zhangsan', ['786', '2.23']]
    ['jesse', 'zhangsan', ['786', '2.23']]
    原列表id: 2557709542024
    拷贝的列表id: 2557710045576
    原列表内嵌列表id: 2557709541960
    拷贝的列表内嵌列表id: 2557709541960
    ['jc', 'zhangsan', ['yuanyuan', '2.23']]
    ['jesse', 'zhangsan', ['yuanyuan', '2.23']]
    原列表id: 2557709542024
    拷贝的列表id: 2557710045576
    原列表内嵌列表id: 2557709541960
    拷贝的列表内嵌列表id: 2557709541960

    2、深拷贝原理:

    深拷贝:

      在拷贝时区分原列表可变和不可变类型,对于不可变类型直接将其值的id及内存地址复制给新的列表,对于可变类型则重新生成一个容器id。(多层嵌套也是如此)

    原理图:

      

     实例:

    import copy
    list=['jesse','zhangsan',['786', '2.23']]
    list1=copy.deepcopy(list)
    print(list)
    print(list1)
    print("原列表id:",id(list))
    print("拷贝的列表id:",id(list1))
    print("原列表内嵌列表id:",id(list[2]))
    print("拷贝的列表内嵌列表id:",id(list1[2]))
    
    list[0]='jc'
    list[2][0]='yuanyuan'
    print(list)
    print(list1)
    print("原列表id:",id(list))
    print("拷贝的列表id:",id(list1))
    print("原列表内嵌列表id:",id(list[2]))
    print("拷贝的列表内嵌列表id:",id(list1[2]))
    # 执行结果
    ['jesse', 'zhangsan', ['786', '2.23']]
    ['jesse', 'zhangsan', ['786', '2.23']]
    原列表id: 2715253531272
    拷贝的列表id: 2715253636040
    原列表内嵌列表id: 2715253532488
    拷贝的列表内嵌列表id: 2715253636104
    ['jc', 'zhangsan', ['yuanyuan', '2.23']]
    ['jesse', 'zhangsan', ['786', '2.23']]
    原列表id: 2715253531272
    拷贝的列表id: 2715253636040
    原列表内嵌列表id: 2715253532488
    拷贝的列表内嵌列表id: 2715253636104
  • 相关阅读:
    java集合遍历的几种方式总结及比较
    mybatis和hibernate中的懒加载
    数据库的四种连接方式
    Maven常用命令
    windows下nginx的安装及使用
    SSM框架:解决后台传数据到前台中文乱码问题,使用@ResponseBody返回json 中文乱码
    Java实现基于token认证
    开放接口/RESTful/Api服务的设计和安全方案详解
    NIO的一坑一惑小记
    Linux下通过源码编译安装程序
  • 原文地址:https://www.cnblogs.com/baicai37/p/12450182.html
Copyright © 2011-2022 走看看