Marshal 是一个将ruby 对象转换为byte的库。marshaling can only load data written with the same major version number and an equal or lower minor version number。他只能对拷贝进行操作。dump是讲object转到byte。load是讲byte转到object。利用它对拷贝进行操作的特性进行深度拷贝。
至于深度拷贝是什么呢?所谓深度拷贝就是这样子一个例子:
str = "hello world "
str2 = str
str2[0] = 'H'
这样子str == "Hello world", str2 == "Hello world"。这样可能引起错误,利用=复制仅仅是给str2一个地址,其实还是只有一份。
而str2 = Marshal.load(Marshal.dump(str))
str2[0] = 'H'
这样子,str == "hello world", "str2" == "Hello world"。这样子是为str2开辟一个内存空间,并且给其一个地址。这样实际上是有2份。