A shallow copy of an object is a copy of the collection structure, not its elements. In other word: if the object contains other objects, those won’t be copied and will be shared instead 1 .
In contrast, a deep copy copies everything.
Example in Ruby
arr1 = ["flamingo", "capybara", "red panda"] arr2 = arr1.dup arr2.upcase! arr2 # => ["FLAMINGO", "capybara", "red panda"] arr2 # => ["FLAMINGO", "capybara", "red panda"]
In this example, both array are modified because the method
String#upcase! was called on the object within the array (the string
flamingo) rather than the array itself. As the String object is shared between the original
arr1 and the copy
arr2, and the method called is destructive, its effect can be seen on both collection.