
module Kernel

  # Anything that can be marshaled can be copied in totality.
  # This is also just called copy.
  #
  #   "ABC".deep_copy  #=> "ABC"
  #
  def deep_copy
    Marshal::load(Marshal::dump(self))
  end

end


#  _____         _
# |_   _|__  ___| |_
#   | |/ _ \/ __| __|
#   | |  __/\__ \ |_
#   |_|\___||___/\__|
#
=begin test

  require 'test/unit'

  class TCKernel < Test::Unit::TestCase
    # fixtures for copy / deep_copy
    class A
      attr_reader :a
      def initialize
        @a = 1
      end
    end
    class B
      attr_reader :b
      def initialize
        @b = A.new
      end
    end

    def test_deep_copy
      o = B.new
      oc = o.deep_copy
      assert_equal( 1, o.b.a  )
    end
  end

=end

