tags:

views:

178

answers:

4

Is there a definitive reference on this in programming?

I see a lot of people refer to deep copying and cloning as the same thing. Is this true?

Is it language dependent?

A small point, but it was bothering me...

+1  A: 

In C++-land "cloning" is usually idiom for deep copying polymorphic classes' objects.

In Java/C# I suspect these terms used more interchangeably.

Alexander Poluektov
+2  A: 

I would say that copy and cloning are analogous terms. The only thing that you should maybe be aware is that you get shallow copy and deep copy. Shallow copy only makes a copy of an object at the root level where as deep copy will produce a copy of an object and all its child objects.

David
+1  A: 

Yes, there is a difference. As far as language dependencies, some languages can do all Shallow, Deep, Lazy copying. Some only do Shallow copies. So yes, it is language dependent sometimes.

Now, take for instance an Array:

int [] numbers = { 2, 3, 4, 5};
int [] numbersCopy = numbers;

The “numbersCopy” array now contains the same values, but more importantly the array object itself points to the same object reference as the “numbers” array.

So if I were to do something like:

  numbersCopy[2] = 0;

What would be the output for the following statements?

  System.out.println(numbers[2]);

  System.out.println(numbersCopy[2]);

Considering both arrays point to the same reference we would get:

0

0

But what if we want to make a distinct copy of the first array with its own reference? Well in that case we would want to clone the array. In doing so each array will now have its own object reference. Let’s see how that will work.

  int [] numbers = { 2, 3, 4, 5};

  int [] numbersClone = (int[])numbers.clone();

The “numbersClone” array now contains the same values, but in this case the array object itself points a different reference than the “numbers” array.

So if I were to do something like:

  numbersClone[2] = 0;

What would be the output now for the following statements?

  System.out.println(numbers[2]);

  System.out.println(numbersClone[2]);

You guessed it:

4

0

Source

0A0D
+2  A: 

There's no formal definition of these concepts, atleast not one that spans all languages.

What's usually common though:

  • clone - create something new based on something that exists.
  • copying - copy from something that exists to something else (that also already exists).
Anonym