Consider the following
from copy import deepcopy
c = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
dc = c.copy()
d = deepcopy(dc)
d['username'] = 'mln'
d['machines'].remove('bar')
print d
print c 
the result is as follows:
{'username': 'mln', 'machines': ['foo', 'baz']}
{'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
but when using shallow copy, things will be different.
a = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
b = a.copy()
b['username']='mln'
b['machines'].remove('bar')
print b
print a
the result is as follows:
{'username': 'mln', 'machines': ['foo', 'baz']}
{'username': 'admin', 'machines': ['foo', 'baz']}
- So for the key - "machines"in dict- d, when using deep copy, Python will create a new list object which is different to the list object in dict- c.
- But when using shallow copy, there's only one list object and both dictionaries point at it. 
- What's more, when I use shallow copy, for objects like tuple and str, it creates a new object. 
- But for dictionary and list,it just adds another reference. When using deep copy, both create a new object. 
Am I right?
 
     
     
    