如何在不破坏分配给它的数组的情况下修改数组?

How can I modify an array without destroying an array assigned to it?

考虑以下因素:

array1 = [1, 2, 3, 4]
array2 = array1 # => [1, 2, 3, 4]
array2.pop
array2 # => [1, 2, 3]
array1 # => [1, 2, 3]

为什么我只在 array2 上调用 poparray1 就被销毁了?有没有办法 pop 来自 array2 的最后一个值并保持 array1 不变,以便我得到 array1 # => [1, 2, 3, 4]?

这是一个别名问题。您的引用指向内存中的同一个 Array 对象。如果你的数组包含像那些 dup 方法那样的简单整数,就可以做到这一点。

array2 = array1.dup

array2 = array1.dup


array2 = array1.clone => 您的更改会影响两个数组

我更喜欢Object#dup方法,但这里还有一个选项供您参考:

> array1 = [1, 2, 3, 4]
#=> [1, 2, 3, 4] 
> array2 = Array.new + array1
#=> [1, 2, 3, 4] 
> array1.object_id
#=> 87422520 
> array2.object_id
#=> 87400390