code: function(target, source){
  		var assignDeep = target[canSymbol.for("can.assignDeep")];
  		if(assignDeep) {
  			assignDeep.call(target, source);
  		} else if( typeReflections.isMoreListLikeThanMapLike(source) ) {
  			// list-like
  			shapeReflections.assignDeepList(target, source);
  		} else {
  			// map-like
  			shapeReflections.assignDeepMap(target, source);
  		}
  		return target;
  	}
docs: @function can-reflect.assignDeep assignDeep
  @parent can-reflect/shape
  @description Assign one objects values to another, and performs the same action for all child values.
  
  @signature `.assignDeep(target, source)`
  
  Copies the values (and properties if map-like) from `source` onto `target` and repeates for all child
  values.
  
  For map-like objects, every enumerable property on `target` is copied:
  
  ```js
  var target = {name: {first: "Justin"}};
  var source = {name: {last: "Meyer"}};
  var restult = canReflect.assignDeep(target, source);
  target //->  {name: {first: "Justin", last: "Meyer"}}
  ```
  
  An object can control the behavior of `assignDeep` using the [can-symbol/symbols/assignDeep] symbol.
  
  @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.