• Python —— 深拷贝&浅拷贝


    1、看示例
    1. import copy
    2. a = [1,2,3,4,["a","b"]]
    3. b = a
    4. c = copy.copy(a) # 浅拷贝 c= [1, 2, 3, 4, ['a', 'b', 'c']]
    5. print(id(a),id(c))
    6. d = copy.deepcopy(a) # 深拷贝 d= [1, 2, 3, 4, ['a', 'b']]
    7. print(id(a),id(d))
    8. a.append(5)
    9. a[4].append("c")
    10. print("a=",a)
    11. print("b=",b)
    12. print("c=",c)
    13. print("d=",d)
    14. # 输出结果:
    15. 32817096 32817032
    16. 32817096 32816296
    17. a= [1, 2, 3, 4, ['a', 'b', 'c'], 5]
    18. b= [1, 2, 3, 4, ['a', 'b', 'c'], 5]
    19. c= [1, 2, 3, 4, ['a', 'b', 'c']]
    20. d= [1, 2, 3, 4, ['a', 'b']]
    2、总结

    深拷贝(Deep Copy):

            深拷贝创建了一个新的对象,该对象与原始对象的内容相同,包括所有的嵌套对象。深拷贝产生了一个完全独立的复制,修改原始对象中的可变对象不会影响新对象。

    1. 示例代码:
    2. import copy
    3. original_list = [1, 2, [3, 4]]
    4. deep_copy_list = copy.deepcopy(original_list)
    5. original_list[0] = 5
    6. original_list[2][0] = 6
    7. print(original_list)    # 输出:[5, 2, [6, 4]]
    8. print(deep_copy_list)   # 输出:[1, 2, [3, 4]]

    浅拷贝(Shallow Copy):

            浅拷贝创建了一个新的对象,该对象与原始对象的内容相同,但是对于可变对象(如列表和字典)来说,新对象只是原始对象的一个引用。这意味着,如果修改了原始对象中的可变对象的值,新对象也会受到影响。

    1. 另外的示例代码:
    2. import copy
    3. original_list = [1, 2, [3, 4]]
    4. shallow_copy_list = copy.copy(original_list)
    5. original_list[0] = 5
    6. original_list[2][0] = 6
    7. print(original_list)       # 输出:[5, 2, [6, 4]]
    8. print(shallow_copy_list)   # 输出:[1, 2, [6, 4]]

    总结:

    浅拷贝只复制了对象的引用,而深拷贝复制了整个对象及其嵌套对象。如果需要对可变对象进行修改而不影响原始对象,应该使用深拷贝。

  • 相关阅读:
    关于app推广和留存用户,建议你这样做
    【LeetCode每日一题:891. 子序列宽度之和~~~排序+数学推导】
    打不过就加入 | 动植物泛基因组研究(一)
    花菁荧光染料Cy3/Cy5/Cy7标记COX-2环氧合酶,Cy3/Cy5/Cy7-Cyclooxygenase-2
    C++单调向量算法:132 模式解法三枚举1
    JSR303和拦截器
    EasyExcel综合课程实战
    python实现UI自动化配置谷歌浏览器驱动
    Django学习日志05
    内存池泄露
  • 原文地址:https://blog.csdn.net/lzf_hlh/article/details/134295395