// Declarations:
List<SomeType> list1 = new List<SomeType>();
List<SomeType> list2 = new List<SomeType>();
...
SomeType something = new SomeType("SomeName");
list1.Add(something);
list2.Add(something);
Помните, что когда вы добавляете объект в список, вы просто добавляете указатель на объект. В этом случае list1 и list2 оба указывают на один и тот же адрес в памяти.
list1[indexOfSomething] = new SomeType("SomeOtherName");
Теперь вы присвоили элемент list1 другому указателю.
Вы на самом деле не сами клонируете объекты, вы копируете указатели, которые просто указывают на один и тот же объект. Если вам нужны доказательства, сделайте следующее:
SomeType something = new SomeType("SomeName");
list1.Add(something);
list2.Add(something);
list1[someIndex].SomeProperty = "Kitty";
bool areEqual = list1[someIndex].SomeProperty == list2[someIndex].SomeProperty;
areEqual
должно быть правдой. Указатели рок!