看板 Ruby 關於我們 聯絡資訊
※ 引述《wwwc (secret)》之銘言: : a = [[0,0], [0,0]] : b = a.dup => a = [[0,0], [0,0]] b = [[0,0], [0,0]] : b[0][0] = 1 => a = [[1,0], [0,0]] b = [[1,0], [0,0]] : ^^^^^^^^^^^^^^ : 我希望改變b不會影響a : 也就是a = [[0,0], [0,0]] : b = [[1,0], [0,0]] : 應該怎麼做呢?謝謝! 因為 dup 和 clone 都是 shallow copy, 而不是 deep copy. 關於 deep copy, 有個 idiom 是: Marshal.load(Marshal.dump(object)) 你可以安裝 facets, 他在 Kernel 中加入了 deep_copy, 就是上面那行。 so: a = [[0,0], [0,0]] b = a.deep_copy b[0][0] = 1 p a # => [[0,0], [0,0]] -- Hear me exalted spirits. Hear me, be you gods or devils, ye who hold dominion here: I am a wizard without a home. I am a wonderer seeking refuge. Sacrifice -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.128.121.85
wwwc:太感謝了! 09/18 14:40