provide seperate method for shallow copy and deep copy.

shallow copy use == to compare. The uncomparable type (e.g. slice) will panic upon comparing with "==". The panic will be recovered by asserts and report as a test failure.
deep copy use reflect.DeepEqual