Python Copy Module
Copy Module is a set of functions that are related to copying different elements of a list, objects, arrays, etc. It can be used to create shallow copies as well as deep copies.
From the Python 3 documentation
Assignment statements in Python do not copy objects, they create bindings between a target and an object. For collections that are mutable or contain mutable items, a copy is sometimes needed so one can change one copy without changing the other. This module provides generic shallow and deep copy operations.
Shallow copy operations
Shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.
copy.copy(x) Return a shallow copy of x.
import copy
a = [[1],[2],[3]]
# Create shallow copy (nested lists are still referenced)
b = copy.copy(a)
a
[[1], [2], [3]]
b
[[1], [2], [3]]
Without importing copy module you can’t use it
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'copy' is not defined
Deep copy operations
A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.
copy.deepcopy(x[, memo]) Return a deep copy of x.
import copy
a = [[1],[2],[3]]
# Create deep copy (completely independent copy)
b = copy.deepcopy(a)
# Modify original
a[0][0] = 0
a[1] = None
a
[[0], None, [3]]
b
[[1], [2], [3]]