深浅拷贝详解 二

时间:2022-06-05 19:51:10

深浅拷贝详解

引用:两个变量指向同一引用 eg:a =[1,2,3]  b= a  id(a)==id(b)

拷贝:是重新拷贝一份引用  内存地址不同

浅拷贝:copy.copy  
        对于一个对象的顶层拷贝
深拷贝:copy.deepcopy
        对于一个对象所有层次的拷贝(递归)
    两个变量 a=b 指向不同的内存地址 
        eg: a = [1,2,3,4]   c = copy.deepcopy(a)   ---> id(a) !=id(c)

注: copy.deepcopy-->一直深入到底
        a = [11,22,33]  b = [44,55,66]  c=[a,b] 
            e = copy.deepcopy(c)  e中的e[0]和e[1]的地址也是重新拷贝的

    copy.copy --->只深度一层
        a = [11,22,33]  b = [44,55,66]  c=[a,b] 
            e = copy.copy(c)  e中的e[0]和e[1]的地址却还是和a,b是一样
        当copy.copy(不可变类型时) ===>相当于浅拷贝
        a = [11,22,33]  b = [44,55,66]  c=(a,b) 
            e = copy.copy(c)  e的指向就是c的内存地址 e中的e[0]和e[1]的地址 和a,b是一样

    元组不一样  元组不可变  所以特殊  引用 和 拷贝 都是指向同一内存地址