深入理解python深拷贝浅拷贝

    技术2023-10-05  105

           之前一直知道python深拷贝浅拷贝,但是都是稀里糊涂的,看了很多博文,似懂非懂,突然明白了自己学习点薄弱点在哪里,看懂了不一定会的,还是需要自己敲一敲代码才是真的理解

    直接上代码

    a = [1,2,3,[4,5,6]]

    b = copy.copy(a)

    c = copy.deepcopy(a)

    我们看下列表空间的Id值

    我们可以看到地址空间不是一个

    但是我们看具体的元素位置地址:

    可以看到深拷贝和浅拷贝元素指向的位置不一样,浅拷贝元素位置与原列表一致,深拷贝与原列表元素空间指向不一样

    这个时候对a中的列表进行修改,a[3].append(7)

    a和b都改变了,深拷贝值未改变。

    结论:所以深拷贝是将所有的元素拷贝,元素重新开辟了新的空间保存。浅拷贝是开辟了新的空间保存元素的值,但是元素中的值指向的空间还是原被拷贝元素位置。如果元素中值是可变元素,浅拷贝的中元素值也会改变。

    所以浅拷贝是多情的种子,分手了不坚决的时候,可以偶尔来个一炮(元素中值有可变元素),藕断丝连。深拷贝,就是不吃回头草,你死你活,跟我没关系。理解深拷贝,深浅拷贝的关键在于拷贝变量内元素是否还是指向原地址

     

     

     

    Processed: 0.022, SQL: 10