Bird
Raised Fist0
Rubyprogramming~5 mins

Object#dup and Object#clone in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does Object#dup do in Ruby?

Object#dup creates a shallow copy of an object. It copies the object's instance variables but does not copy the object's singleton methods or frozen state.

Click to reveal answer
beginner
How is Object#clone different from Object#dup?

Object#clone also creates a shallow copy but copies the frozen state and singleton methods of the original object, unlike dup.

Click to reveal answer
intermediate
Does dup copy singleton methods of an object?

No, dup does not copy singleton methods. Only clone copies singleton methods.

Click to reveal answer
intermediate
What happens to the frozen state of an object when using dup and clone?

dup does not copy the frozen state; the new object is unfrozen. clone copies the frozen state, so if the original was frozen, the clone is frozen too.

Click to reveal answer
intermediate
Explain shallow copy in the context of dup and clone.

Both dup and clone create shallow copies, meaning they copy the object itself but not the objects referenced by its instance variables. Changes to nested objects affect both copies.

Click to reveal answer
Which method copies singleton methods of an object in Ruby?
Adup
Bcopy
Cnew
Dclone
If an object is frozen, which method preserves this frozen state in the copy?
Aclone
Bdup
Cboth dup and clone
Dneither dup nor clone
What kind of copy do dup and clone create?
AShallow copy
BDeep copy
CReference copy
DNo copy
Which of the following is NOT copied by dup?
ASingleton methods
BInstance variables
CObject's class
DObject's frozen state
After using dup on a frozen object, what is the frozen state of the new object?
AFrozen
BUnfrozen
CDepends on the object
DRaises an error
Describe the main differences between Object#dup and Object#clone in Ruby.
Think about what extra features clone copies compared to dup.
You got /4 concepts.
    Explain what shallow copy means when using dup or clone on an object.
    Consider what happens to objects inside the copied object.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main difference between dup and clone in Ruby?
      easy
      A. clone copies frozen state and singleton methods; dup does not.
      B. dup copies frozen state and singleton methods; clone does not.
      C. dup creates a deep copy; clone creates a shallow copy.
      D. clone only copies instance variables; dup copies the entire object.

      Solution

      1. Step 1: Understand what dup copies

        dup creates a shallow copy but does not copy frozen state or singleton methods.
      2. Step 2: Understand what clone copies

        clone copies everything including frozen state and singleton methods.
      3. Final Answer:

        clone copies frozen state and singleton methods; dup does not. -> Option A
      4. Quick Check:

        clone copies all [OK]
      Hint: Remember: clone copies everything, dup skips frozen and singleton [OK]
      Common Mistakes:
      • Thinking dup copies frozen state
      • Confusing shallow and deep copy
      • Assuming clone skips singleton methods
      2. Which of the following is the correct syntax to create a copy of an object obj using dup?
      easy
      A. copy = obj.dup()
      B. copy = dup(obj)
      C. copy = obj.clone()
      D. copy = obj.copy()

      Solution

      1. Step 1: Identify the method call syntax

        In Ruby, dup is called on the object as obj.dup or obj.dup().
      2. Step 2: Check other options

        clone is a different method, dup(obj) and copy() are invalid.
      3. Final Answer:

        copy = obj.dup() -> Option A
      4. Quick Check:

        Use obj.dup() to copy [OK]
      Hint: Call dup as a method on the object: obj.dup() [OK]
      Common Mistakes:
      • Using clone instead of dup
      • Trying dup(obj) as a function
      • Using non-existent copy() method
      3. What will be the output of the following Ruby code?
      class MyClass
        def greet
          "Hello"
        end
      end
      
      obj = MyClass.new
      obj_singleton = obj.clone
      
      def obj_singleton.greet
        "Hi"
      end
      
      copy1 = obj.dup
      copy2 = obj.clone
      
      puts copy1.greet
      puts copy2.greet
      medium
      A. Error at runtime
      B. Hello Hi
      C. Hi Hi
      D. Hello Hello

      Solution

      1. Step 1: Understand singleton method copying

        Singleton methods are copied by clone but not by dup. Here, obj_singleton has a singleton method greet returning "Hi".
      2. Step 2: Check what copy1 and copy2 get

        copy1 = obj.dup does not copy singleton methods, so copy1.greet calls original method returning "Hello".
        copy2 = obj.clone copies singleton methods only from obj, not from obj_singleton. Since obj has no singleton method, copy2.greet returns "Hello".
      3. Final Answer:

        Hello Hello -> Option D
      4. Quick Check:

        dup and clone copy singleton only from original object [OK]
      Hint: Singleton methods copy only from original object, not clones [OK]
      Common Mistakes:
      • Assuming clone copies singleton methods from clones
      • Thinking dup copies singleton methods
      • Expecting 'Hi' output from copy2
      4. Consider this Ruby code snippet:
      str = "hello"
      str.freeze
      copy = str.dup
      puts copy.frozen?
      What is the output and why? If there is an error, identify and fix it.
      medium
      A. true
      B. false
      C. NoMethodError
      D. RuntimeError

      Solution

      1. Step 1: Understand freezing and dup behavior

        The string str is frozen. When dup is called, it copies the object but does NOT copy the frozen state.
      2. Step 2: Check frozen state of copy

        Since dup skips frozen state, copy.frozen? returns false.
      3. Final Answer:

        false -> Option B
      4. Quick Check:

        dup skips frozen state, so frozen? = false [OK]
      Hint: dup skips frozen state, clone keeps it [OK]
      Common Mistakes:
      • Expecting copy to be frozen
      • Confusing frozen? method with freeze
      • Assuming dup raises error on frozen objects
      5. You have an object obj with singleton methods and it is frozen. You want to create a copy that preserves both the singleton methods and the frozen state. Which method should you use and why?
      hard
      A. Use obj.dup because it copies singleton methods but not frozen state.
      B. Use obj.dup and then manually freeze the copy.
      C. Use obj.clone because it copies both singleton methods and frozen state.
      D. Use obj.clone and then manually add singleton methods.

      Solution

      1. Step 1: Identify method that copies singleton methods and frozen state

        dup skips frozen state and singleton methods, so it is not suitable.
      2. Step 2: Confirm clone behavior

        clone copies both singleton methods and frozen state automatically.
      3. Final Answer:

        Use obj.clone because it copies both singleton methods and frozen state. -> Option C
      4. Quick Check:

        clone copies all including frozen and singleton [OK]
      Hint: clone copies frozen state and singleton methods together [OK]
      Common Mistakes:
      • Using dup and expecting frozen state copied
      • Manually adding singleton methods after clone
      • Freezing after dup instead of cloning
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard