zoukankan      html  css  js  c++  java
  • python的拷贝方式以及深拷贝,浅拷贝详解

    python的拷贝方法有:切片方法, 工厂方法, 深拷贝方法, 浅拷贝方法等。

    几种方法都可以实现拷贝操作, 具体区别在于两点:1.代码写法不同。 2.内存地址引用不同

    代码演示:

     1 import copy
     2 li = ['li', [100, 200, 300]]
     3 li_1 = li[:]       # 切片方法
     4 li_2 = list(li)    # 工厂方法
     5 li_3 = copy.copy(li)    # 浅拷贝
     6 li_4 = copy.deepcopy(li)  # 深拷贝
     7 print('li', li, 'id:', id(li))
     8 print('li1', li_1, 'id:', id(li_1))
     9 print('li2', li_2, 'id:', id(li_2))
    10 print('li3', li_3, 'id:', id(li_3))
    11 print('li4', li_4, 'id:', id(li_4))
    12 
    13 # 运行结果
    14 # li ['li', [100, 200, 300]] id: 47813336
    15 # li1 ['li', [100, 200, 300]] id: 47814096
    16 # li2 ['li', [100, 200, 300]] id: 47513768
    17 # li3 ['li', [100, 200, 300]] id: 47508656
    18 # li4 ['li', [100, 200, 300]] id: 56333696
    19 # 可以看到id都不一样,说明他们指向的都不是同一个列表对象
    20 # 将除深拷贝以外任意一个方法的‘100’,重新赋值为400, 再次运行结果为
    21 li_2[1][0] = 400
    22 print('li', li, 'id:', id(li))
    23 print('li1', li_1, 'id:', id(li_1))
    24 print('li2', li_2, 'id:', id(li_2))
    25 print('li3', li_3, 'id:', id(li_3))
    26 print('li4', li_4, 'id:', id(li_4))
    27 # li ['li', [400, 200, 300]] id: 56332976
    28 # li1 ['li', [400, 200, 300]] id: 56333736
    29 # li2 ['li', [400, 200, 300]] id: 56033528
    30 # li3 ['li', [400, 200, 300]] id: 56028416
    31 # li4 ['li', [100, 200, 300]] id: 56333696
    32 # 可以看到:只改变了一个列表而除deepcopy之外其他的列表对象都变成的‘400’
    33 print('li', li, 'id:', id(li))
    34 print('li1', li_1, 'id:', id(li_1))
    35 print('li2', li_2, 'id:', id(li_2))
    36 print('li3', li_3, 'id:', id(li_3))
    37 print('li4', li_4, 'id:', id(li_4))

    因为除deepcopy之外其它的拷贝方法都只是拷贝了列表中对象的引用,再开辟一块新的内存来储存,如果其中一个数据变了, 其他的也会跟着改变。

    而deepcopy是拷贝的对象本身, 一旦拷贝过来, 则与之前的被拷贝者没有任何关系(自己改变与原来的数组无关,原来的数组改变与自己无关)

    萧伯纳说:“你有一个苹果,我有一个苹果,彼此交换一下,我们彼此仍然是各有一个苹果;但是你有一种思,我有一种思想,彼此交换一下,才发现从不同角度看到的问题远比本身更深刻,所以多交流多沟通是我们提高自我能力的一种方式!!!

    如果你有更好更简单的方法,请一定评论谢谢!!!

  • 相关阅读:
    “增绿”——气候变化减排之外中国提出新方法
    当资本遇见万科章程
    [转]最简单实现跨域的方法:用 Nginx 反向代理
    活在雾霾下
    为石墨烯弄套产业政策?且慢!
    2016年的A股变数:IPO重启、注册制与国企改革
    被指“造假” 京东喊冤 到底谁在卖“真褚橙”?
    在管理教练与管理之间寻找平衡
    聪明的CEO如何将战略付诸执行
    苹果公司如何推动整个产业的前进
  • 原文地址:https://www.cnblogs.com/logn2/p/8119164.html
Copyright © 2011-2022 走看看