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。如果使用浅拷贝,新建阀值都将被改变。

  • 相关阅读:
    密码强度正则表达式 – 必须包含大写字母,小写字母和数字,至少8个字符等
    |DataDirectory|的使用
    SqlParameter的作用与用法
    C# 通过http post 请求上传图片和参数
    webuploader批量导入文件
    MVC使用Controller完成登录验证
    网页特效 模板素材
    C#中的Cookie 添加 读取 删除
    JS jquery jquery.wordexport.js 实现导出word
    初始配置JDK
  • 原文地址:https://www.cnblogs.com/python-study/p/5448717.html
Copyright © 2011-2022 走看看