In type assignment:
List<SomeType> newList = oldList;
Both lists will be the same, adding or removing one item in the list will cause it to change in another list. They both use the same memory space next to the extra pointer.
List<SomeType> newList = new List<SomeType>(); newList.AddRange(oldList);
Will 2 share an independent list (both in memory). A change in one list will not affect the other.
Keep in mind if your "SomeType" is a complex type ... lets say "product". In BOTH CASE, the entire list will refer to your products, so the change in the product will be changed in another list.
To copy the list and the product necessary for cloning the product, and which can be a hoax, because cloning is recursive depending on the complexity of the type.
source share