• 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]}
  • 相关阅读:
    常见的http状态码
    浅谈!DOCTYPE声明的作用?严格模式与混杂模式的区别?
    异步控制---实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出“end”
    Ecmascript 6新特性
    关于数组去重的几种方法-------javascript描述
    关于字符串的一些操作
    写一个将字符串转成驼峰命名的方法
    js作用域之常见笔试题,运行结果题
    CSS3实现图片黑白滤镜居中,hover缩放遮罩的效果
    远程桌面与本地桌面实现文件传输
  • 原文地址:https://www.cnblogs.com/nb-blog/p/6397394.html
Copyright © 2020-2023  润新知