精华内容
下载资源
问答
  • 深浅拷贝

    万次阅读 2017-06-23 15:38:07
    深浅拷贝

    一、数字和字符串
    对于数字和字符串而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。

    import copy
    
    ########## 数字、字符串 ###########
    #n1 = 123
    n1 = "i am a beautiful girl."
    print(id(n1))
    ### 赋值 ###
    n2 = n1
    print(id(n2))
    ### 浅拷贝 ###
    n2 = copy.copy(n1)
    print(id(n2))
    
    ### 深拷贝 ###
    n3 = copy.deepcopy(n1)
    print(id(n3))

    这里写图片描述
    二、其他基本数据类型
    对于字典、元组、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。
    1、赋值
    赋值,只是创建一个变量,该变量指向原来内存地址,如:

    n1 = {"k1": "zhang", "k2": 123, "k3": ["mary", 456]}
    n2 = n1

    这里写图片描述
    2、浅拷贝
    浅拷贝,在内存中只额外创建第一层数据

    import copy
    
    n1 = {"k1": " zhang ", "k2": 123, "k3": ["mary ", 456]}
    n3 = copy.copy(n1)

    这里写图片描述
    3、深拷贝

    深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

    import copy
    
    n1 = {"k1": " zhang ", "k2": 123, "k3": ["mary ", 456]}  
    n4 = copy.deepcopy(n1)

    这里写图片描述
    应用:
    浅拷贝

    import copy
    
    dic = {
        "cpu":[80,],
        "mem":[80,],
        "disk":[80,],
    }
    print("before dic",dic)
    new_dic = copy.copy(dic)
    new_dic["cpu"][0] = 50
    print("new_dic dic",new_dic)
    print("after dic",dic)

    运行结果:

    before dic {'cpu': [80], 'mem': [80], 'disk': [80]}
    new_dic dic {***'cpu': [50]***, 'mem': [80], 'disk': [80]}
    after dic {'***cpu': [50]***, 'mem': [80], 'disk': [80]}

    深拷贝

    import copy
    
    dic = {
        "cpu":[80,],
        "mem":[80,],
        "disk":[80,],
    }
    print("before dic",dic)
    new_dic = copy.deepcopy(dic)
    new_dic["cpu"][0] = 50
    print("new_dic dic",new_dic)
    print("after dic",dic)

    输出结果:
    before dic {‘cpu’: [80], ‘mem’: [80], ‘disk’: [80]}
    new_dic dic {‘cpu’: [50], ‘mem’: [80], ‘disk’: [80]}
    after dic {‘cpu’: [80], ‘mem’: [80], ‘disk’: [80]}

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,593
精华内容 2,237
关键字:

深浅拷贝