copy and deepcopy in python

Normal assignment operations will simply point the new variable towards the existing object. The docs explain the difference between shallow and deep copies:

  • The difference between shallow and deep copying is only relevant for compound objects (objects that contain other objects, like lists or class instances):
  • A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.
  • A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.

Here’s a little demonstration:

import copy
a = [1, 2, 3]
b = [4, 5, 6]
c = [a, b]
# Using normal assignment operatings to copy
d = c
print id(c) == id(d) # True - d is the same object as c
print id(c[0]) == id(d[0]) # True - d[0] is the same object as c[0]

#Using a shallow copy
d = copy.copy(c)
print id(c) == id(d) # False - d is now a new object
print id(c[0]) == id(d[0]) # True - d[0] is the same object as c[0]

#Using a deep copy
d = copy.deepcopy(c)
print id(c) == id(d) # False - d is now a new object
print id(c[0]) == id(d[0]) # False - d[0] is now a new object

可以形象的理解为:

copy type depict
normal assignment 0层拷贝
shallow copy 1层拷贝
deep copy n层拷贝

what-exactly-is-the-difference-between-shallow-copy-deepcopy-and-normal-assignm

在koala bear地博文中也有类似地解释。