
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地博文中也有类似地解释。




近期评论