Skip to content
instance method

Kernel#clone

(?freeze: bool?) -> self
obj.clone(freeze: nil) → an_object

Produces a shallow copy of obj—the instance variables of obj are copied, but not the objects they reference. clone copies the frozen value state of obj, unless the :freeze keyword argument is given with a false or true value. See also the discussion under Object#dup.

Example
class Klass
   attr_accessor :str
end
s1 = Klass.new      #=> #<Klass:0x401b3a38>
s1.str = "Hello"    #=> "Hello"
s2 = s1.clone       #=> #<Klass:0x401b3998 @str="Hello">
s2.str[1,4] = "i"   #=> "i"
s1.inspect          #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
s2.inspect          #=> "#<Klass:0x401b3998 @str=\"Hi\">"

This method may have class-specific behavior. If so, that behavior will be documented under the #initialize_copy method of the class.

Ruby version changes

  1. 3.3
  2. 3.0
    • Kernel#clone when called with the freeze: false keyword will call initialize_clone with the freeze: false keyword. [Bug #14266]

    • Kernel#clone when called with the freeze: true keyword will call initialize_clone with the freeze: true keyword, and will return a frozen copy even if the receiver is unfrozen. [Feature #16175]

See also #class #Complex #chop #__dir__ also in 4.1 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0