code: function(target, source){
  		var updateDeep = target[canSymbol.for("can.updateDeep")];
  		if(updateDeep) {
  			updateDeep.call(target, source);
  		} else if( typeReflections.isMoreListLikeThanMapLike(source) ) {
  			// list-like
  			shapeReflections.updateDeepList(target, source);
  		} else {
  			// map-like
  			shapeReflections.updateDeepMap(target, source);
  		}
  		return target;
  	}
docs: @function can-reflect.updateDeep updateDeep
  @parent can-reflect/shape
  @description Makes the values of an object match the values of an other object including all children values.
  
  @signature `.updateDeep(target, source)`
  
  Updates the values (and properties if map-like) of `target` to match the values of `source`.
  Removes properties from `target` that are not on `source`.
  
  For map-like objects, every enumerable property on `target` is copied:
  
  ```js
  var target = {name: {first: "Justin"}, age: 34};
  var source = {name: {last: "Meyer"}};
  var result = canReflect.updateDeep(target, source);
  target //->  {name: {last: "Meyer"}}
  ```
  
  An object can control the behavior of `updateDeep` using the [can-symbol/symbols/updateDeep] symbol.
  
  For list-like objects, a diff and patch strategy is used.  This attempts to limit the number of changes.
  
  @param  {Object} target The value that will be updated with `source`'s values.
  @param  {Object} source A source of values to copy to `target`.
  @return {Object} The target.