美文网首页
深浅拷贝

深浅拷贝

作者: 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函数。和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。

相关文章

  • 2018-08-29

    深浅拷贝 1.根据拷贝内容的不同,分为深浅拷贝 深拷贝:内容...

  • js的深浅拷贝

    js的深浅拷贝可以分为数组的深浅拷贝和对象的深浅拷贝 一、数组的深浅拷贝如果只是简单的将数组中的元素付给另外一个数...

  • Python—浅拷贝与深拷贝

    浅拷贝 深拷贝 深浅拷贝的作用

  • 深浅拷贝

    先来了解一下这些:在js中变量类型基本分为两种:基本数据类型和引用数据类型;基本类型:Underfied Null...

  • 深浅拷贝

    浅拷贝是对一个对象的顶层拷贝。通俗的理解就是:拷贝了引用,并没有拷贝内容。 深拷贝是对于一个对象所有层次的拷贝(递...

  • 深浅拷贝

    深浅拷贝.copy 浅拷贝 这是一个方法,浅拷贝修改可变类型是会将原数据也一块修改 Copy.deepcopy 深...

  • 深浅拷贝

    1:is 和 ==的区别 is 是比较两个引用是否指向了同一个对象(地址引用比较)。== 是比较两个对象是否相等。...

  • 深浅拷贝

    函数的传递,与matlab不同,具有以下特点: 1.直接赋值会带来不同ID,例如,a=2,b=2 2.传递引用赋值...

  • 深浅拷贝

    最近一直被问到深浅拷贝的问题。自己也确实不太清楚怎么回事,现在来研究一下。 什么是深浅拷贝 浅拷贝:指针拷贝,不会...

  • 深浅拷贝

    概念: 浅复制:不拷贝对象本身,仅仅是拷贝指向对象的指针深复制:是直接拷贝整个对象内存到另一块内存中 注意:这里有...

网友评论

      本文标题:深浅拷贝

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