• copy之深浅拷贝


    深浅拷贝
    深拷贝 全部复制
    浅拷贝 只复制第一层

    __author__ = 'Perfect'
    # -*- coding: utf-8 -*-
    import copy
    # copy.copy() #浅拷贝
    #
    # copy.deepcopy()# 深拷贝
    # a = '123' #赋值
    
    a1 = '123'
    a2 = a1 #通过赋值 得变量,使用的都是同一个内存地址
    print(id(a1))#查看a1 的内存地址
    print(id(a2))#查看a2 的内存地址
    a3 = copy.copy(a1) #浅拷贝,a1  使用的内存地址 与a1 是一样的内存地址
    print(id(a3))#查看浅拷贝之后的内存地址是否与a1 一致
    
    a4 = copy.deepcopy(a1) #深拷贝,无论使用的深拷贝还是浅拷贝,在内存地址中 使用的都是同一个内存地址
    print(id(a4))#打印深拷贝之后 在内存中使用的内存地址是否与a1 一致

    #总结:对于字符串,深浅拷贝 在内存中使用的都是同一个内存地址.

    #元祖、列表、字典之间的深浅拷贝
    #浅拷贝

    n1 = {'k1':"wo","k2":123,"k3":["huzhi",456]}
    n2 = n1
    print(id(n1))
    print(id(n2))
    n3 = copy.copy(n1) #定义n3 浅拷贝n1
    print(id(n1)) #对比n1 与 n3 的内存地址是否是一样的
    print(id(n3)) #对比n1 与 n3 的内存地址是否是一样的
    print(id(n1["k1"])) #对比字典中的元素 是否是一样的
    print(id(n3['k1']))#对比字典中的元素是否是一样的

    #--------------------------
    #深拷贝 是 把 字典的所有元素都拷贝
    #如果 深拷贝之后 字典的所有元素 内存地址 都不一样,就说明 深拷贝成功了
    #总结:深拷贝就是说 这个 字典 有多少层,就会 进行深拷贝,并且 深拷贝后,原字典 和深拷贝之后的内存地址 是 不同的

    k9 = copy.deepcopy(n1) #深拷贝
    print(id(n1))
    print(id(k9))

     #深浅拷贝之应用实例

    __author__ = 'Perfect'
    # -*- coding: utf-8 -*-
    #深浅拷贝 应用
    import copy
    #如果有如下字典
    dic = {
        "cpu":[80],
        "mem":[80],
        "disk":[80]
    }
    #----------------浅拷贝实例---------------
    
    print("更改前字典:",dic)
    new_dic = copy.copy(dic)#浅拷贝 赋值给 new_dic
    new_dic['cpu'][0] = 50  #修改 赋值后的new_dic 字典 cpu 的值
    print("更改后字典:",new_dic)          #查看 new_dic的值被修改了
    print("更改后字典:",dic)              #查看原来字典的cpu 值 也被修改了,这就是浅拷贝
    #输出:
    # {'cpu': [50], 'mem': [80], 'disk': [80]}
    # {'cpu': [50], 'mem': [80], 'disk': [80]}
    #----------------深拷贝实例---------------
    '''
    print("更改前字典:",dic)
    Lao_dic = copy.deepcopy(dic)
    Lao_dic['cpu'][0] = 100
    print("更改之后的:",Lao_dic)
    print("原来的字典:",dic)
    '''
    #输出:
    # 原来的字典: {'cpu': [80], 'mem': [80], 'disk': [80]}
    # 更改之后的: {'cpu': [100], 'mem': [80], 'disk': [80]}
  • 相关阅读:
    AMD平台如何使用Android Studio官方的高性能模拟器
    Nginx安装SSL证书,开启HTTPS加密
    【English】20190429
    【Teradata】TD Unicode编码格式下varchar定义测试
    【Teradata TTU】Windows TTU安装工具列表
    【English EMail】2019 Q2 Public Holiday Announcement
    【English】20190428
    【张东武 老架一路74式第一段】第二式 金刚捣碓
    【影音制作】编辑视频
    【Teradata SQL】多行转一列函数TDStats.udfConcat
  • 原文地址:https://www.cnblogs.com/nb-blog/p/6397394.html
Copyright © 2020-2023  润新知