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

时间:2019-09-24 18:57:01

标签: arrays ruby assign

我今天试图解决一个kata,它使我逐步完成了一部分练习。我遇到的问题可以简化为以下细微差别:

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]

有人可以阐明这一点,还是可以引导我浏览有关此问题的文档。我认为我从来没有注意到这种情况。谢谢。

1 个答案:

答案 0 :(得分:1)

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

分配整数时,此整数的a值存储在变量中。重新分配它时,另一个值存储在此变量中。如果使用常量a = 1或另一个变量a = b重新分配它,则没有任何区别。

要注意的重要一点是,分配也适用于数组-引用的值已重新分配。如果您分配另一个数组,则原始数组不会更改。

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

另请参阅:

相关问题