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

  • 相关阅读:
    python基础33——进程池&线程池/协程
    python基础32——线程
    pycharm2020
    python基础31——进程
    python基础31——操作系统史&多道
    jmeter如何保持JSESSIONID
    Jmeter中自动重定向与跟随重定向的区别
    Jmeter之HTTP Cookie 管理器
    Kubernetes简述
    docker集群部署
  • 原文地址:https://www.cnblogs.com/python-study/p/5448717.html
Copyright © 2011-2022 走看看