Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 克隆后仍修改原始数组的元素_Scala - Fatal编程技术网

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
,这就是您的意思吗?您的两个代码段都是相同的对不起,我更新了它可能重复的