code: function(target, source) {
  		if(typeReflections.isIteratorLike(source) || typeReflections.isMoreListLikeThanMapLike(source) ) {
  			// copy to array and add these keys in place
  			shapeReflections.assignList(target, source);
  		} else {
  			shapeReflections.assignMap(target, source);
  		}
  		return target;
  	}
docs: @function can-reflect.assign assign
  @parent can-reflect/shape
  @description Assign one objects values to another
  
  @signature `.assign(target, source)`
  
  Copies the values (and properties if map-like) from `source` onto `target`.
  
  For map-like objects, every enumerable property on `target` is copied:
  
  ```js
  var target = {};
  var source = {key : "value"};
  var restult = canReflect.assign(target, source);
  result === target //-> true
  target //-> {key : "value"}
  ```
  
  For Arrays, enumerated values are copied over, but the length of the array will not be
  trunkated.  Use [can-reflect.update] for trunkating.
  
  ```js
  var target = ["a","b","c"];
  var source = ["A","B"];
  canReflect.assign(target, source);
  target //-> ["A","B","c"]
  ```
  
  @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.