Arrays 字符串和数组的奇怪行为
在这里,我将数组的值赋给一个变量,然后改变变量,数组也会改变Arrays 字符串和数组的奇怪行为,arrays,string,powershell,Arrays,String,Powershell,在这里,我将数组的值赋给一个变量,然后改变变量,数组也会改变 $TestArray=@{“ValueA”=“A”;“ValueB”=“B”;“Number”=“B”} $TestNumbers=1..10 foreach($testnumbers中的数字){ $results=$TestArray $results.Number=$Number 写入主机$TestArray.Number } 我原以为$results=$TestArray会复制$TestArray,但此测试表明修改$resul
$TestArray=@{“ValueA”=“A”;“ValueB”=“B”;“Number”=“B”}
$TestNumbers=1..10
foreach($testnumbers中的数字){
$results=$TestArray
$results.Number=$Number
写入主机$TestArray.Number
}
我原以为$results=$TestArray
会复制$TestArray
,但此测试表明修改$results
也会更改$TestArray
中的相应值
有人能帮我理解这种行为吗?做:
$results=$TestArray
将$results
作为对TestArray
引用的同一对象的引用。因此,如果更改其中一个,另一个也会受到影响,因为它们是相同的对象
要使
$results
成为$TestArray
的副本,您可以使用其:
$results=$TestArray.Clone()
另外,请注意,
$TestArray
实际上不是数组。它是一个(也称为hashmap),其中键与值配对。数组类似于:
$TestArray=(1,2,3)
执行以下操作:
$results=$TestArray
将$results
作为对TestArray
引用的同一对象的引用。因此,如果更改其中一个,另一个也会受到影响,因为它们是相同的对象
要使
$results
成为$TestArray
的副本,您可以使用其:
$results=$TestArray.Clone()
另外,请注意,
$TestArray
实际上不是数组。它是一个(也称为hashmap),其中键与值配对。数组类似于:
$TestArray=(1,2,3)
谢谢,我真的很惊讶我刚刚才注意到这种行为。这是有道理的。我想知道引用行为是否适用于所有字符串、数组、哈希表和对象?这取决于所讨论的对象是否可以变异。如果它类似于哈希表,那么是的,因为您可以从中添加/删除项。如果它是一个不可变的对象,如字符串,则不会,因为字符串不能更改(对它们的所有操作都会生成新对象,而不是修改旧对象)。以下是关于可变对象和不可变对象之间区别的解释:。谢谢,我真的很惊讶我刚刚才注意到这种行为。这是有道理的。我想知道引用行为是否适用于所有字符串、数组、哈希表和对象?这取决于所讨论的对象是否可以变异。如果它类似于哈希表,那么是的,因为您可以从中添加/删除项。如果它是一个不可变的对象,如字符串,则不会,因为字符串不能更改(对它们的所有操作都会生成新对象,而不是修改旧对象)。下面是关于可变对象和不可变对象之间区别的解释:。