克隆ListBuffer不可变问题Scala

Teo*_*off 2 scala copy list mutable immutability

我有一个var x类型ListBuffer[ListBuffer[Int]],其中我使用函数克隆clone并设置为另一个var y,然后我使用update此新函数var y来更新内容,但是当我检查它的原始内容var x是否相同var y?为什么是这样?我究竟做错了什么?他们的解决方法是什么?我试图获得ListBuffer的副本,我可以修改,而无需更改初始ListBuffer的原始内容.

eva*_*man 5

clone 只做一个浅拷贝,你需要一个深拷贝:

scala> import collection.mutable.ListBuffer
import collection.mutable.ListBuffer

scala> var a = ListBuffer(ListBuffer(1, 2), ListBuffer(3,4))
a: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1, 2), ListBuffer(3, 4))


scala> var b = a.clone
b: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1, 2), ListBuffer(3, 4))

scala> b(0)(0) = 100

scala> a
res1: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))

scala> b
res2: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))

scala> var c = a.clone.map(_.clone)
c: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))

scala> c(0)(0) = 1000

scala> c
res3: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1000, 2), ListBuffer(3, 4))

scala> a
res4: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))
Run Code Online (Sandbox Code Playgroud)