On Jul 19, 10:21 am, Falcolas <[EMAIL PROTECTED]> wrote: > On Jul 18, 6:56 am, "Rustom Mody" <[EMAIL PROTECTED]> wrote: > > > This is shallow copy > > If you want deep copy then > > from copy import deepcopy > > What will a "deep copy" of a list give you that using the slice > notation will not?
With a shallow copy, you end up with a new list object, but the items contained within the new list object are the same as in the original list object. This makes no real difference if the original list only contains immutable values (such as strings, integers, or floats), but it can make a big difference if the values are mutable. >>> originalList = [1, 2, [3, 4]] >>> shallowCopy = originalList[:] >>> shallowCopy.append(5) >>> print str(originalList), '\n', str(shallowCopy) [1, 2, [3, 4]] [1, 2, [3, 4], 5] >>> originalList[2].append(100) # Mutate the list inside this list >>> print str(originalList), '\n', str(shallowCopy) [1, 2, [3, 4, 100]] [1, 2, [3, 4, 100], 5] >>> As you can see in the above code snipped, the original list contains a list at index 2. The slice copy is a different list, so appending a 5 to it doesn't modify the original list. However, the result of appending 100 to the object at index 2 can be seen in both lists. A deep copy creates a new object for ever item in the list, and all items in those items, and so forth, so the lists guaranteed to be truly disconnected: >>> from copy import deepcopy >>> originalList = [1, [2, [3, 4]]] >>> fullCopy = deepcopy(originalList) >>> originalList[1][1].append(100) >>> print originalList, '\n', fullCopy [1, [2, [3, 4, 100]]] [1, [2, [3, 4]]] >>> --Jason -- http://mail.python.org/mailman/listinfo/python-list