
[code]

    a=[[1,2],[]]
    b=Array.new(a)
    b[1].push(b[0].pop)
    
[/code]

としてaを変更前bを変更後としたいのに  
どちらも[[1],[2]]となる  
私の間違い？rubyの間違い？


CC BY-SA 3.0
2016-12-23T13:05:43.640
31339
2016-12-24T01:35:20.883
2016-12-24T01:35:20.883
19999
19999
question
ruby
配列の変換前と変換後が同じになる


[Array.new](https://docs.ruby-lang.org/ja/1.8.7/method/Array/s/new.html)から引用

> 指定された配列 ary を複製して返します。 Array#dup 同様 要素を複製しない浅い複製です。

ということで、Array.new(配列)で作成した要素は元のオブジェクトと同じもの(同じものを参照している)です。  
いわゆる浅いコピー（シャローコピー）です。

参照：[深いコピーと浅いコピー](https://docs.ruby-
lang.org/ja/latest/method/Object/i/clone.html)


CC BY-SA 3.0
2016-12-23T13:44:47.137
31340
2016-12-23T13:53:57.883
2016-12-23T13:53:57.883
5044
5044
31339
answer