Scala 克隆后仍修改原始数组的元素
我有以下代码:Scala 克隆后仍修改原始数组的元素,scala,Scala,我有以下代码: val copyA = a.clone copyA(0)(0) = 1 println("a(0)(0): " + a(0)(0)) 这张照片是: a(0)(0): 1 如果我将其更改为: val copyA = a.clone println("a(0)(0): " + a(0)(0)) 它打印: a(0)(0): 0 那么为什么a会受到copyA中的更改的影响呢 如何使copyA中的更改不影响a?您克隆了阵列。你没有克隆阵列中的任何东西 在代码中,您没有操作数组。您将
val copyA = a.clone
copyA(0)(0) = 1
println("a(0)(0): " + a(0)(0))
这张照片是:
a(0)(0): 1
如果我将其更改为:
val copyA = a.clone
println("a(0)(0): " + a(0)(0))
它打印:
a(0)(0): 0
那么为什么a
会受到copyA
中的更改的影响呢
如何使
copyA
中的更改不影响a
?您克隆了阵列。你没有克隆阵列中的任何东西
在代码中,您没有操作数组。您将从数组中获取一个元素并操作该对象。这里的数组完全不相关。您克隆了数组。你没有克隆阵列中的任何东西
在代码中,您没有操作数组。您将从数组中获取一个元素并操作该对象。这里的数组完全不相关。变异克隆的1D数组实例不会改变原始实例,反之亦然 例如
scala> val original = Array(100, 200)
original: Array[Int] = Array(100, 200)
scala> val cloned = original.clone
cloned: Array[Int] = Array(100, 200)
变异克隆
数组不会影响原始
数组,
scala> cloned(0) = 5000
scala> original(0) //still the same value
res36: Int = 100
scala> original(0) = 8888
scala> cloned(0) // still the same
res38: Int = 5000
scala> val original = Array.ofDim[Int](2,2)
original: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> original.foreach {col => println(col)}
[I@745e24c4
[I@42c6563f
变异原始
数组不会影响克隆
数组,
scala> cloned(0) = 5000
scala> original(0) //still the same value
res36: Int = 100
scala> original(0) = 8888
scala> cloned(0) // still the same
res38: Int = 5000
scala> val original = Array.ofDim[Int](2,2)
original: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> original.foreach {col => println(col)}
[I@745e24c4
[I@42c6563f
但是对于2D数组它是不同的,因为里面的每个数组都是一个ref,必须进行深度克隆
scala> cloned(0) = 5000
scala> original(0) //still the same value
res36: Int = 100
scala> original(0) = 8888
scala> cloned(0) // still the same
res38: Int = 5000
scala> val original = Array.ofDim[Int](2,2)
original: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> original.foreach {col => println(col)}
[I@745e24c4
[I@42c6563f
深度克隆2D阵列
scala> val cloned = original.map(_.clone)
cloned: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> original(0)(0) = 5000
scala> cloned(0)(0)
res43: Int = 0
//changing cloned does not change original array
scala> cloned(0)(0) = 8888
scala> original(0)(0)
res48: Int = 5000
变异克隆的1D数组实例不会改变原始实例,反之亦然 例如
scala> val original = Array(100, 200)
original: Array[Int] = Array(100, 200)
scala> val cloned = original.clone
cloned: Array[Int] = Array(100, 200)
变异克隆
数组不会影响原始
数组,
scala> cloned(0) = 5000
scala> original(0) //still the same value
res36: Int = 100
scala> original(0) = 8888
scala> cloned(0) // still the same
res38: Int = 5000
scala> val original = Array.ofDim[Int](2,2)
original: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> original.foreach {col => println(col)}
[I@745e24c4
[I@42c6563f
变异原始
数组不会影响克隆
数组,
scala> cloned(0) = 5000
scala> original(0) //still the same value
res36: Int = 100
scala> original(0) = 8888
scala> cloned(0) // still the same
res38: Int = 5000
scala> val original = Array.ofDim[Int](2,2)
original: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> original.foreach {col => println(col)}
[I@745e24c4
[I@42c6563f
但是对于2D数组它是不同的,因为里面的每个数组都是一个ref,必须进行深度克隆
scala> cloned(0) = 5000
scala> original(0) //still the same value
res36: Int = 100
scala> original(0) = 8888
scala> cloned(0) // still the same
res38: Int = 5000
scala> val original = Array.ofDim[Int](2,2)
original: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> original.foreach {col => println(col)}
[I@745e24c4
[I@42c6563f
深度克隆2D阵列
scala> val cloned = original.map(_.clone)
cloned: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))
scala> original(0)(0) = 5000
scala> cloned(0)(0)
res43: Int = 0
//changing cloned does not change original array
scala> cloned(0)(0) = 8888
scala> original(0)(0)
res48: Int = 5000
您的两个案例都是相同的
copyA(0)(0)=1
,这就是您的意思吗?您的两个代码段都是相同的对不起,我更新了它。您的两个案例都可能重复copyA(0)(0)=1
,这就是您的意思吗?您的两个代码段都是相同的对不起,我更新了它可能重复的