T.J*_*der 15
浅层克隆和深度克隆之间的主要区别是什么?
浅层克隆复制树的顶层,但是从该顶层指向的任何内容(例如,对象属性)仍由两个副本共享.深度克隆复制树的所有级别,在源和副本之间不留任何链接.
例如,假设你有一个Person带有spouse属性的对象(a),它也是一个Person对象:
+-------------+
| Person: a |
+-------------+
| name: "Joe" |
| spouse |-------------->+---------------+
+-------------+ | Person |
+---------------+
| name: "Mary" |
+---------------+
如果你做一个浅浅的克隆a来b,双方a并b指向同一个 Person从他们的spouse属性:
+-------------+
| Person: a |
+-------------+
| name: "Joe" |
| spouse |------+
+-------------+ |
|
+-------------+ +------->+---------------+
| Person: b | +------->| Person |
+-------------+ | +---------------+
| name: "Joe" | | | name: "Mary" |
| spouse |------ +---------------+
+-------------+
如果你进行深度克隆,你不仅要克隆a到b,而是克隆a.spouse到b.spouse它们,以便它们每个都有自己的副本.
+-------------+
| Person: a |
+-------------+
| name: "Joe" |
| spouse |-------------->+---------------+
+-------------+ | Person |
+---------------+
+-------------+ | name: "Mary" |
| Person: b | +---------------+
+-------------+
| name: "Joe" |
| spouse |-------------->+---------------+
+-------------+ | Person |
+---------------+
| name: "Mary" |
+---------------+
哪个好多了?
都不是.两者都有用途,两者都可能被滥用.