作者godfat (godfat 真常)
看板Ruby
标题Re: [问题] 关於dup
时间Thu Sep 18 14:38:57 2008
※ 引述《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
1F:推 wwwc:太感谢了! 09/18 14:40