王者克隆模式不见了 编程里面的深拷贝和浅拷贝各是什么意思,怎么理解这两个?
编程里面的深拷贝和浅拷贝各是什么意思,怎么理解这两个?
浅拷贝意味着源对象和拷贝对象共享同一个实体,只是引用的变量不同(名称不同)。对其中一个对象的更改会影响另一个对象。例如,一个人的名字起初是张三,后来改成了李四,但却是同一个人。无论是张三缺胳膊缺腿,还是李四缺胳膊缺腿,都是同一个人的厄运。深度复制是指源对象和复制对象相互独立,任何对象的改变都不会影响到另一个对象。例如,一个叫张三的人被用来克隆另一个叫李四的人。不管张三缺胳膊缺腿,李四缺胳膊缺腿,都不会影响别人。典型的是值对象,例如预定义的类型int32、double、struct、enum等
PHP对象的浅复制与深复制的实例详解?
原型模式
使用原型实例指定要创建的对象的类型,并通过复制这些原型来创建新对象
原型模式基于深度复制和浅层复制。在Java中,有两种拷贝:
shallow copy
拷贝一个对象后,会生成一个新的对象。新对象的所有成员变量(基本类型或引用类型)都包含与原始对象相同的对象
如果原始对象的成员变量是基本数据类型,则此变量的值将复制到新对象。如果原始对象的成员变量是引用数据类型,则此引用指向的对象将不会生成新的引用,而是
新对象中的引用和原始对象的引用指向同一对象。
深度复制
复制对象后,将生成一个新对象。新对象的基本数据类型变量包含与原始对象相同的值。例如
如果原始对象的成员变量是引用数据类型,则在新对象中,这些引用变量将指向复制的新对象,而
不再指向原始引用对象。深度复制将复制被复制对象引用的所有对象。
例如:
有一个对象a,它被复制以生成对象B。如果对象a中有一个int类型变量I的值为4,则对象B中的int值也是4。将a改为int类型变量不会影响B。如果a中有一个引用类型为
的成员变量C,它将指向对象D。复制后,B中也会有一个C,它也指向对象D,a的C和B的C指向同一个
对象D,这是浅层复制。如果是深度复制,a中的C指向一个D对象,B中的C指向一个新对象
,它们不会指向同一个对象。这样,对原始对象中成员变量C指向的对象D所做的任何更改都不会影响新对象。
举一个最简单的例子:
classA{
publicinti
publicintj
}
AA=newa()
浅拷贝:
Aa1=a
深拷贝:
Aa1=newa()
A1。I=A.I
A1。J=A.J
感觉如下:
浅拷贝只复制对象本身
深拷贝复制对象中引用的对象并继续复制。
在c中深拷贝与浅拷贝有什么区别?
一般来说,深拷贝和浅拷贝的区别主要在于指针(或指针)。浅层复制只是将源对象的指针(它指的是通用对象,而不仅仅是类的实例)分配给目标对象。目标指针的操作是源对象的操作,因此在许多情况下,目标对象被销毁(或跳出),然后源对象的相关部分也被销毁。深度复制是为目标对象重新分配空间,它可以从源对象的操作中分离出来。
浅拷贝与深拷贝的区别是什么?
1. 深拷贝和浅拷贝都是源对象的拷贝,占用不同的内存空间。
2. 不可变类型的对象对深副本和浅副本没有影响,并且最终地址值和值是相等的。
3. 变量类型:
=浅复制:等值,等地址
浅复制:等值,不等地址
深复制:等值,不等地址
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。