deep and shallow copy explained