美文网首页
python提高:关于深拷贝(deep copy)和浅拷贝(sh

python提高:关于深拷贝(deep copy)和浅拷贝(sh

作者: JIAKELEI | 来源:发表于2018-09-17 17:23 被阅读0次

    其实在面试中会经常被问到Python中深拷贝和浅拷贝的知识,这里进行下总结,以便以后复习

    python中的深拷贝和浅拷贝和java里面的概念是一样的,所谓的浅拷贝就是拷贝第一层中的引用,所谓的深拷贝就是逐层进行拷贝(对对象的资源进行拷贝)。

    首先谈谈可变对象和不可变对象

    1.可变对象

    在python中,list,set,dict 等类型的数据都是可变对象,相对于不可变对象而言,可变对象的数据可以被修改。

    l = [1, 2, 3]

    l[0] = 10

    # 列表是一个可变对象,可以修改列表中的元素值

    2.不可变对象

    在 Python 中,int, str, tuple 等类型的数据都是不可变对象,不可变对象的特性是数字不可被修改。

    1 = 2

    # 1 和 2都是不可变对象,1 不可能被 2 所代替

    浅拷贝

    1.不可变对象的拷贝:不开辟新空间,相当于赋值操作

    2.可变对象的拷贝:元素是可变对象,并且被修改,那么拷贝的对象也会发生变化

    浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素。

    深拷贝


    深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。

    总结:

    不可变对象在赋值时会开辟新空间。

    可变对象在赋值时,修改一个的值,另一个也会发生改变。

    深浅拷贝对不可变对象拷贝时,不开辟新空间,相当于赋值操作。

    浅拷贝在拷贝时,只拷贝第一层中的引用,如果元素是可变对象,并且被修改,那么拷贝的对象也会发生变化。

    深拷贝在拷贝时,会逐层进行拷贝,直到所有的引用都是不可变对象为止。

    相关文章

      网友评论

          本文标题:python提高:关于深拷贝(deep copy)和浅拷贝(sh

          本文链接:https://www.haomeiwen.com/subject/odlrnftx.html