常见的复制方式有以下5种
第1种:通过等号[=]复制
- 不论可变还是不可变数据类型,通过[=]复制后都指向同一个内存地址;
- 改变复制后的数据(例子中的anotherStr,anotherList),原数据中不可变数据模型值未改变,可变数据模型值改变
-
第2种:通过工厂方法复制
- 不可变数据模型复制后指向同一个内存地址,可变数据模型指向不同地址;
- 改变复制后的数据,原数据中不可变数据模型值未改变,可变数据模型值改变
-
第3种:通过[:](值传递)复制
- 不可变数据模型不涉及;可变数据模型指向不同内存地址;
- 改变复制后的数据),原数据中不可变数据模型值未改变,可变数据模型值改变
-
第4种:通过浅拷贝(copy)方法复制
- 不可变数据模型复制后指向同一个内存地址,可变数据模型指向不同地址;
- 改变复制后的数据,原数据中不可变数据模型值未改变,可变数据模型值改变
-
第5种:通过深拷贝(deepcopy)方法复制
- 不可变数据模型复制后指向同一个内存地址,可变数据模型指向不同地址;
- 改变复制后的数据,原数据中不可变、可变数据模型值均未改变
总而言之
对于不可变数据模型,不论通过什么办法复制,通过改变复制后的数据,均不会改变原数据的值
对于可变数据模型,除深拷贝不会改变原数据值,其他均会改变原数据值