zoukankan      html  css  js  c++  java
  • python深浅拷贝

    import copy

    dic = {                  #定义一个字典,字典里的每一个元素是一个数组。
    "cpu":[80,], 
    "mem":[80],
    "disk":[80,]
    }

    new_dic = copy.copy(dic)      #浅拷贝, 第一层字典被copy, 重新分配了内存空间。 但是第二层数组元素地址是一样的,所以改变 一个字典的数组值,另一个字典的数组值也改变了。
    new_dic['cpu'][0]=50

    print(id(dic))
    print(id(new_dic))
    print(dic)
    print(new_dic)
    print(id(dic["cpu"]))
    print(id(new_dic["cpu"]))

    输出:

    4364928
    4988880                        #浅拷贝 只有第一层字典被copy,重新分配了内存。
    {'disk': [80], 'cpu': [50], 'mem': [80]}
    {'disk': [80], 'cpu': [50], 'mem': [80]}
    5890896                          
    5890896                       # 浅拷贝 第二层数组不copy, 内存地址不变。

    #如果是深拷贝, 字典 和 下一层的数组都被copy, 重新分配内存

    new_dic = copy.deepcopy(dic)
    new_dic['cpu'][0]=50
    print(id(dic))
    print(id(new_dic))
    print(dic)
    print(new_dic)
    print(id(dic["cpu"]))
    print(id(new_dic["cpu"]))

    输出:

    9804416
    15901520
    {'disk': [80], 'cpu': [80], 'mem': [80]}
    {'disk': [80], 'cpu': [50], 'mem': [80]}
    16245584                                 
    16244984                        #第二层的数组也重新分配内存, 所以改变 new_dic 的数据元素,不会影响 dic 的数组元素值。

    对于数字和字符串, 赋值 和 深浅拷贝 都不会重新分配内存。

    import copy
    a1 = "asdf"
    a3 = a1
    a2 = copy.deepcopy(a1)
    print(id(a1))
    print(id(a2))
    print(id(a3))

    输出:

    2251168  #三个变量的内存地址都一样。
    2251168
    2251168 

  • 相关阅读:
    mina之小小总结(标准的菜鸟级别,行家勿入)
    tomcat(就一句话,自己的日记性质)
    MINA转自itoyo
    java web(没含量的,百科上的)
    解决VS.NET 2008中aspx文件没有设计界面
    正则表达式教程
    [VB] Option Explicit
    sql自定義函數 包含遊標
    sql 中 null+others=?
    实用手机号、IP、身份证号、歌曲查询接口
  • 原文地址:https://www.cnblogs.com/z360519549/p/7376796.html
Copyright © 2011-2022 走看看