Fixed loose copy with layered initial data

 * Fixed loose copy when dealing with layered initial data.
   This is an important fix since a loose copy will cause
   data to continue to be stored consecutively, without
   any clearing across multiple channels or instances.
   The fix uses copy.deepcopy() to ensure that each
   part of the data_dict gets its own memory to work
   with. (And most importantly, they don't share the
   same data.)