首先通过一句话来解释:深拷贝就是内容拷贝,浅拷贝就是指针拷贝。
深拷贝就是拷贝出和原来仅仅是值一样,但是内存地址完全不一样的新的对象,创建后和原对象没有任何关系。浅拷贝就是拷贝指向原来对象的指针,使原对象的引用计数+1,可以理解为创建了一个指向原对象的新指针而已,并没有创建一个全新的对象。
(1)非容器类对象的深拷贝、浅拷贝
对于字符串这类非容器类对象,copy是浅拷贝,mutable是深拷贝。
对于MutableString,无论是copy还是mutableCopy,都会创建一个新对象,都是属于深拷贝。
对于可变对象的复制,都是深拷贝;
-- 可变对象copy后返回的对象是不可变的,mutableCopy后返回的对象是可变的。
(2)非容器类对象的深拷贝、浅拷贝
-- 容器对象和非容器对象类似,可变对象复制(copy,mutableCopy)的都是一个新对象;不可变对象copy是浅复制,mutableCopy是深复制。
-- 对于容器而言,元素对象始终是指针复制。