美文网首页
深浅拷贝

深浅拷贝

作者: yatttto | 来源:发表于2016-10-24 02:58 被阅读0次

    深浅拷贝拷贝的例子,还是自己复习归纳一遍比较好,虽然很久之前C++以及JAVA都有学习到,这里就用最近常用的Python来理解一遍吧。
    浅拷贝,就是对当前对象的引用进行的一个拷贝,当引用发生改变时,原来的对象也会发生改变。
    而深拷贝不一样,深拷贝是对当前对象的值重新分配一块内存空间,当对象改变时,深拷贝的值并没有进行改变。
    浅拷贝:

    >>> ls = [1,2,3,4,5]
    >>> c_ls = ls
    >>> ls[0]=0
    >>> c_ls
    [0, 2, 3, 4, 5]
    >>> id(c_ls) == id(ls)
    True
    
    

    这里我们进行的就是浅拷贝,等于是对列表的对象的引用进行了拷贝,在C++中也就是对当前内存重新申请了指针,但是这个指针指向的是已经存在的内存。而深拷贝不一样,深拷贝是为被赋值的对象重新申请了一块内存。
    深拷贝:

    >>> ls = [1,[2,3]]
    >>> c_ls = ls 
    >>> import copy
    >>> c2_ls = copy.deepcopy(ls)
    >>> ls[1].append(4)
    >>> c_ls
    [1, [2, 3, 4]]
    >>> c2_ls
    [1, [2, 3]]
    
    

    但是这里要注意切片,序列对象的切片其实是浅拷贝,即只拷贝顶级的对象。深拷贝只有一种形式,copy模块中的deepcopy函数。和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。

    相关文章

      网友评论

          本文标题:深浅拷贝

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