zoukankan      html  css  js  c++  java
  • Python基础之深浅copy

    1. 赋值

    ```Python lst1 = [1, 2, 3, ["a", "b", "c"]] lst2 = lst1

    lst1[0] = 11
    print(lst1) #[11, 2, 3, ['a', 'b', 'c']]
    print(lst2) #[11, 2, 3, ['a', 'b', 'c']]

    lst1[3][0] = "d"
    print(lst1) #[11, 2, 3, ['d', 'b', 'c']]
    print(lst2) #[11, 2, 3, ['d', 'b', 'c']]

    对于赋值运算来说,lst1和lst2指向的是同一个内存地址,所以它们是一样的。
    
    <h2>2. 浅copy</h2>
    <h3>2.1 示例1</h3>
    ```Python
    lst1 = [1, 2, 3, ["a", "b", "c"]]
    lst2 = lst1.copy()
    print(lst1, id(lst1))
    print(lst2, id(lst2))
    

    执行结果为:

    [1, 2, 3, ['a', 'b', 'c']] 48285736
    [1, 2, 3, ['a', 'b', 'c']] 48285776
    

    2.2 示例二

    ```Python lst1 = [1, 2, 3, ["a", "b", "c"]] lst2 = lst1.copy() lst1[0] = 11 print(lst1, id(lst1)) print(lst2, id(lst2)) ``` 执行结果为: ```Python [11, 2, 3, ['a', 'b', 'c']] 48285736 [1, 2, 3, ['a', 'b', 'c']] 48285776 ```

    2.3 示例三

    ```Python lst1 = [1, 2, 3, ["a", "b", "c"]] lst2 = lst1.copy() lst1[3][0] = "d" print(lst1, id(lst1)) print(lst2, id(lst2)) ``` 执行结果为: ```Python [1, 2, 3, ['d', 'b', 'c']] 48285536 [1, 2, 3, ['d', 'b', 'c']] 48285736 ```

    2.4 总结

    对于浅copy来所,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址。
    所以,对于第二层以及更深的层数来说,保持一致性。

    3. 深拷贝(deepcopy)

    3.1 示例一

    ```Python import copy lst1 = [1, 2, 3, ["a", "b", "c"]] lst2 = copy.deepcopy(lst1)

    print(lst1, id(lst1))
    print(lst2, id(lst2))

    执行结果为:
    ```Python
    [1, 2, 3, ['a', 'b', 'c']] 54249392
    [1, 2, 3, ['a', 'b', 'c']] 54249992
    

    3.2 示例二

    ```Python import copy lst1 = [1, 2, 3, ["a", "b", "c"]] lst2 = copy.deepcopy(lst1)

    lst1[0] = 11
    print(lst1, id(lst1))
    print(lst2, id(lst2))

    执行结果为:
    ```Python
    [11, 2, 3, ['a', 'b', 'c']] 48678832
    [1, 2, 3, ['a', 'b', 'c']] 48679432
    

    3.3 示例三

    ```Python import copy lst1 = [1, 2, 3, ["a", "b", "c"]] lst2 = copy.deepcopy(lst1)

    lst1[3][0] = "d"
    print(lst1, id(lst1))
    print(lst2, id(lst2))

    执行结果为:
    ```Python
    [1, 2, 3, ['d', 'b', 'c']] 46516144
    [1, 2, 3, ['a', 'b', 'c']] 46516744
    

    3.4 总结

    对于deepcopy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
  • 相关阅读:
    Developer 转型记:一个开发平台的“魔力”
    实践录丨如何在鲲鹏服务器OpenEuler操作系统中快速部署OpenGauss数据库
    一图看懂华为云DevCloud如何应对敏捷开发的测试挑战
    华为云GaussDB(DWS)内存知识点,你知道吗?
    在人工智能时代追逐的“后浪”
    【华为云技术分享】DLI跨源|当DLI遇见MongoDB
    授人以渔:stm32资料查询技巧
    云小课 | IPv4枯了,IPv6来了
    揭秘淘宝平台广告策略,拆解最佳投放实践
    520了,用32做个简单的小程序
  • 原文地址:https://www.cnblogs.com/yang-wei/p/9630540.html
Copyright © 2011-2022 走看看