def mergedicts_copy(d1, d2):
 ret = d1.copy()
 _setmerged(ret, d2)
 for k in d2:
  if ((k in d1) and isinstance(d1[k], dict) and isinstance(d2[k], dict)):
   ret[k] = mergedicts_copy(d1[k], d2[k])
  else:
   ret[k] = d2[k]
 return ret

def mergedicts_copy ( d1 , d2 ) : ret = d1 . copy ( ) _setmerged ( ret , d2 ) for k in d2 : if ( ( k in d1 ) and isinstance ( d1 [ k ] , dict ) and isinstance ( d2 [ k ] , dict ) ) : ret [ k ] = mergedicts_copy ( d1 [ k ] , d2 [ k ] ) else : ret [ k ] = d2 [ k ] return ret
recursively merge two dictionaries .