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

    1.针对字符和数字的赋值,深拷贝与浅拷贝

    import copy
    s1 = "abcdefg"
    s2 = s1
    print (id(s1))
    print (id(s2))
    结果:

      24266496
      24266496

     结论:对于赋值操作,内存地址是一致的。

    import copy
    s1 = "abcdefg"
    s2 = copy.copy(s1)
    print (id(s1))
    print (id(s2))
    结果:

      5129984
      5129984

     结论:对于浅拷贝,内存地址也是一致的

    import copy
    s1 = "abcdefg"
    s2 = copy.deepcopy(s1)
    print (id(s1))
    print (id(s2))
    结果:

      24069888
      24069888

     结论:对于深拷贝,内存地址也是一致的

    2.针对列表,元祖与字典的赋值,深拷贝与浅拷贝

    import copy
    n1 = {"k1":['v11','v12',('v131','v132')],"k2":('v21','v22','v23'),"k3":"v31"}
    n2 = n1
    print (id(n1))
    print (id(n2))
    print (id(n1['k1'][0]))
    print (id(n2['k1'][0]))
    结果:

      24617448
      24617448
      24594208
      24594208

     结论:对于赋值操作,n2跟n1是同一个指向关系

    import copy
    n1 = {"k1":['v11','v12',('v131','v132')],"k2":['v21','v22','v23'],"k3":"v31"}
    n2 = copy.copy(n1)
    print (id(n1))
    print (id(n2))

    print (id(n1['k1']))
    print (id(n2['k1']))
    结果:

      30712296
      30965472
      31193048
      31193048

     结论:对于浅拷贝,只有第一层是在内存中新建内存区域保存指向关系

    import copy
    n1 = {"k1":['v11','v12',('v131','v132')],"k2":['v21','v22','v23'],"k3":"v31"}
    n2 = copy.deepcopy(n1)
    print (id(n1))
    print (id(n2))

    print (id(n1['k1']))
    print (id(n2['k1']))

    print (id(n1['k1'][0]))
    print (id(n2['k1'][0]))
    结果:

      21144040
      21147600
      24639488
      24638088
      21120800
      21120800

     结论:对于深拷贝,拷贝深层的内部结构

    深浅拷贝的应用:

    import copy
    dic = {
    "cpu":[80,],
    "mem":[80,],
    "disk":[80,]
    }

    print (dic)

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

    结果:

      {'disk': [80], 'mem': [80], 'cpu': [80]}
      {'disk': [80], 'mem': [80], 'cpu': [80]}
      {'disk': [80], 'mem': [80], 'cpu': [50]}

     结论:原来的阀值不修改,新添加的服务器阀值被重新设置为了50。如果使用浅拷贝,新建阀值都将被改变。

  • 相关阅读:
    扁平化职能管理三部曲
    [转载]持续交付和DevOps的前世今生
    敏捷项目管理工具-百度效率云
    敏捷项目管理:基础知识与应用实务
    第8章 “敏捷+”创新创业模式
    第7章 "敏捷+"项目管理
    第6章 迭代循环与项目结束
    第5章 发布循环
    第4章 立项与项目启动
    Windows 2003 + IIS6.0 相关 401.1 或 401.2 等问题解决
  • 原文地址:https://www.cnblogs.com/python-study/p/5448717.html
Copyright © 2011-2022 走看看