zoukankan      html  css  js  c++  java
  • 深拷贝和浅拷贝

    一、浅拷贝

    是对于一个对象的顶层拷贝,拷贝引用地址,没有拷贝内容,内存地址一样,共享地址~!

        例子:

    a = [1,2,3]

    b = [4,5,6]

    c = [a,b]

    e = c

    >>> id(c)

    140693012256888

    >>> id(e)

    140693012256888

    clipboard

    copy.copy

    如果是可变类型,只拷贝第一层,id地址不一样,如果是不可变类型,一层都不拷贝直接指向,id地址一样!

    clipboard

    clipboard

    不可变类型:

    clipboard

    clipboard

    例子:

    list1 = [1,2]

    list2= list2[:]

    list2[0]=1

    #list2 变化了,但是list1没有变化,id执行地址不同(只拷贝一层),也是浅拷贝

    print(id(list1),id(list2))

    #如果有了子列表

    list3=[3,4,[1,2]]

    list4=list3[:]

    list4[2][0]=111

    #内存地址还是不一样,因为只拷贝一层,有共同指向子列表,所以list4的子列表变化了,list3的子列表变化了。

    以下操作会会出现浅拷贝的情况

    • 使用切片[:]操作
    • 使用工厂函数(如list/dir/set)
    • 使用copy模块中的copy()函数

    二、深拷贝

    1、深拷贝

    另外创建一份内容出来,id地址不一样。

    clipboard

    clipboard

    深拷贝:copy.deepcopy()

    得到了不该得到的得到,就会失去不该失去的失去! 忍受别人不能忍受的忍受,就能享受别人不能享受的享受!
  • 相关阅读:
    poj 3071 Football (概率dp)
    CF1408G Clusterization Counting
    2-sat
    线段树优化建图
    SP5971 LCMSUM
    [NOI2020]命运
    SP19149 INS14H
    Atcoder ARC-068
    CF908G New Year and Original Order
    (四)、Fiddler打断点
  • 原文地址:https://www.cnblogs.com/sunjingjingking/p/9231181.html
Copyright © 2011-2022 走看看