这两种内存分配有什么区别?

What is the difference between these two memory assignments?

我今天试图解决一个卡塔,它让我在练习的一部分中循环。我遇到的问题可以简化为以下细微差别:

node = [1]
root_node = node

node << 2

p node #[1,2]
p root_node #[1,2]

node = 1
root_node = node

new_node = 3
node = new_node


p node #3
p root_node #1

为什么当我修改分配给一个变量的数组时 noderoot_node 都发生了变化,但为一个变量赋值却没有修改另一个?

我本以为 node = [1,2]root_node = [1]

有人可以阐明这一点或指导我寻找有关此的文档。我想我从来没有注意到是这样的。谢谢你。

当你给一个数组赋值时,变量保存了一个对该数组的引用值。当您将其分配给另一个变量时,将复制该引用。然后当你调用 << 改变数组时,它在两个变量下都是可见的,因为只有一个数组。

当你分配一个整数时,这个整数的值被存储在变量中。当您重新分配它时,另一个值将存储在此变量中。如果您使用常量 a = 1 或另一个变量 a = b.

重新分配它,则没有区别

需要注意的重要一点是,数组的赋值也是如此——引用的值被重新赋值。如果你给另一个数组赋值,原来的数组不会改变。

node = [1]
root_node = node
new_node = [3]
node = new_node
p node
#[3]
p root_node
#[1]

另请参阅: