如何在Kotlin中正确复制列表(list):克隆、拷贝和深拷贝
大家好!我刚开始学习Kotlin,在处理列表时遇到了一个意想不到的问题。
我有一个数字列表 `originalList`,我想复制它,以便修改副本时不影响到原列表。我尝试直接将一个列表赋值给另一个:
```kotlin
fun main() {
val originalList = mutableListOf(1, 2, 3, 4, 5)
val copiedList = originalList
copiedList.add(6)
println("Original: $originalList") // [1, 2, 3, 4, 5, 6] — 改变了!
println("Copied: $copiedList") // [1, 2, 3, 4, 5, 6]
}
```
如你所见,修改 `copiedList` 时,`originalList` 也发生了变化。这是因为变量 `copiedList` 引用的是内存中的同一个对象,而不是数据的新副本。
我知道在Java中,复制列表使用的是 `new ArrayList<>(originalList)`。但在Kotlin中是否有更惯用的方式?有没有像 `.clone()`、`.copy()` 或 `toList()` 这样的方法?如果列表中包含复杂对象,又该如何处理?