If your object doesn't have singleton methods you can use this 
construct:

Marshal.load(Marshal.dump(a))

Cheers,
Kent.

On Dec 10, 2004, at 2:59 PM, Brian Schröäer wrote:

> Hello Group,
>
> I sometimes which to make a deep copy of an object. I know I could use 
> Marshal,
> but thats slow so I want to write a routine #deep_copy. (Or should I 
> overwrite
> #dup ?)
>
> Now the question is, how do you write those. I could use this:
>
> class A
>   ...
>   def deep_copy
>     result = self.dup
>     result.field1 = self.field1.deep_copy
>     ...
>   end
> end
>
> or
>
> class A
>   def initialize(field1 = 'default value', ...)
>     @field1 = field
>     ...
>   end
>
>   def deep_copy
>     self.new(@field1.deep_copy)
>   end
> end
>
> Which allows me to use instance variables.
>
> Is there something more elegant. What do you prefer? Am I on the right 
> track?
>
> Best regards,
>
> Brian
>
> -- 
> Brian Schröäer
> http://www.brian-schroeder.de/
>