zoukankan      html  css  js  c++  java
  • 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]}
  • 相关阅读:
    语言精粹【摘要】
    【转】一个Java程序员应该掌握的10项技能
    比较有用的网址
    推荐一些国内的Jquery CDN免费服务
    CSS3动画【归纳总结】
    scrollTo与border结合使用的小玩意
    aria-label及aria-labelledby应用//////////[信息无障碍产品联盟]
    aria初探(一)
    没有this的JavaScript
    Front-end Job Interview Questions
  • 原文地址:https://www.cnblogs.com/nb-blog/p/6397394.html
Copyright © 2011-2022 走看看