深拷贝(deep clone)与浅拷贝(shallow clone) 浅复制(浅克隆):被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. 深复制(深克隆):被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量. 那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象.换言之,深复制把要复制的对象所引用的对象都复制了一遍.…
clone()方法是Object的native方法.protected native Object clone() throws CloneNotSupportedException;  声明为protected,表明子类必须重新实现该方法,除非是与Obeject类在一个包里,后者是不可能的.而实际上,作为native方法clone()已经有一份field to field的浅拷贝实现,实际上是不需要一定重写的.这种情况下,需要的做法就是覆写clone()方法,在方法里通过super.clone…
Summary 浅克隆与深克隆对于JavaSE来说,是个难度系数比较低的概念,但不应该轻视它. 假设一个场景:对于某个list,代码里并没有任何对其的直接操作,但里面的元素的属性却被改变了,这可能就涉及到这个概念. Description 浅克隆指仅copy对象位于栈内存中的引用(reference).copy后,新旧两个引用指向同一个堆内存对象(即同一内存区域),但是堆内存中实际的对象copy前后均只有一个.使用"==" operator比较二者的地址会返回true.(不同引用,同一…
首先查看拷贝模块(copy)发现: >>> help(copy)Help on module copy:NAME    copy - Generic (shallow and deep) copying operations.DESCRIPTION    Interface summary:                import copy                x = copy.copy(y)        # make a shallow copy of y       …
写在前面 其实看了这么多,总结一个结论: 拷贝的初衷的目的就是为了:修改原来的对象不能影响到拷贝出来得对象 && 修改拷贝出来的对象也不能影响到原来的对象 所以,如果原来对象就是immutable的,然后用使用copy,生成的对象也还是immutable的,原来和现在的对象都是不可变的,所以就没有必要单独在内存中开辟存储空间,既生成新的对象了.所以这样生成的叫浅拷贝(shallow copy). -----------------------------------------------…
shallow clone 浅克隆经常在一些大型仓库中很有用——不用花费大量时间去clone一个完整的仓库,仅仅checkout出来某个分支(如master)的最新N次递交: git clone --depth https://github.com/openwrt/openwrt.git 由于clone的内容非常少,因此速度就大大提升了.查看git log也只有最后一次递交记录而已.…
深拷贝(深复制)和浅拷贝(浅复制)是两个比较通用的概念,尤其在C++语言中,若不弄懂,则会在delete的时候出问题,但是我们在这幸好用的是Java.虽然java自动管理对象的回收,但对于深拷贝(深复制)和浅拷贝(浅复制),我们还是要给予足够的重视,因为有时这两个概念往往会给我们带来不小的困惑. 浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象.深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象.举例来说更加清楚:对象A1中包含对B1的引用…
git clone 和 download 不一样,能用git clone 就用git clone,download的代码,经常出现安装bug…
一.浅复制和深复制概念 浅复制(浅克隆): 被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不是复制它所引用的对象. 深复制(深克隆): 被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他对象的变量.那些引用其他对象的变量将指向被复制过的新对象, 而不再试原有的那些被引用的对象.换言之,深复制把复制的对象所应用的对象都复制了一遍. 二.Java的Clone()方法 [定义在Object类中] clone方…
区别就在于是否对对象中的引用变量所指向的对象进行拷贝. 1.浅克隆/浅复制/浅拷贝 浅拷贝是指在拷贝对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行拷贝,没有对引用指向的对象进行拷贝. 2.深克隆/深复制/深拷贝 深拷贝是指在拷贝对象时,同时会对引用指向的对象进行拷贝. 示例代码: import java.util.Date; class Wife implements Cloneable { private String name; private Date b…