diff --git a/source/Collection_Data_Types.rst b/source/Collection_Data_Types.rst
index 13bb6e834808e65d7a3da0ba31cefb32c8318d08..5e5739d792a7d5232f35b17cae85fb401601ea36 100644
--- a/source/Collection_Data_Types.rst
+++ b/source/Collection_Data_Types.rst
@@ -350,4 +350,38 @@ solution ::
               
 solution ::
 
-   inverted_d = {v : k for k, v in d.items()}
\ No newline at end of file
+   inverted_d = {v : k for k, v in d.items()}
+   
+Exercise
+--------
+
+We assume that we have a phylogenic tree of mammals represented as nested lists. ::
+    
+   mammals = ['Bovine', ['Gibbon', ['Orang Utan', ['Gorilla', ['Chimp', 'Human']]]], 'Mouse' ]
+   
+We want to work on the subtree of apes (Gibbon, Orang Utan, Gorilla, Chimp, Human) 
+
+* extract the this subtree in a new tree
+* then insert 'Bonobo' at the same level of Chimp we want to obtanin something like this :[chimp, bonobo], Human]
+   
+what's append on mammals? explain the result. ::
+
+   import copy
+     
+   mammals = ['Bovine', ['Gibbon', ['Orang Utan', ['Gorilla', ['Chimp', 'Human']]]], 'Mouse' ]
+   apes = copy.copy(mammals[1])
+   apes [1][1][1] = [['Chimp', 'Bonobo'], 'Human']
+   print mammals
+   ['Bovine', ['Gibbon', ['Orang Utan', ['Gorilla', ['Chimp', 'Human']]]], 'Mouse' ]
+
+what we should do to work with apes without modify mammals?
+   
+when we extract apes form mammals we did a shallow copy of mammals. tha mean we create a new list but each item in mammals 
+are not copy. when we modify apes we mutate an element of apes which was also referenced in mammals so mammals is modified to.
+This is what we call a side effect. To avoid that we should use deepcopy from module copy.
+to create apes we should write: ::
+
+   apes = copy.deepcopy(mammals[1]) 
+   
+deepcopy not only copy the list but make also a copy of each items of list recursively.
+ 
\ No newline at end of file