Objeto de sessão é alterado quando o objeto é atualizado em c #

Eu tenho esse problema muito estranho e tenho certeza que estou perdendo algo óbvio aqui. Eu tenho estas duas linhas:

HttpContext.Current.Session[listModelType + "ListModel"] = listModel;
listModel.ProductRows = new Collection<ProductRow>(listModel.ProductRows.Where(r => r.ParentRowId == 0).ToList());

Depois que a segunda linha é executada, meu objeto de sessão também é atualizado (de acordo com "Watch" no Visual Studio)

O que estou perdendo aqui?

eu tentei

int i = 0;
HttpContext.Current.Session["i"] = i;
i++;

e HttpContext.Current.Session ["i"] permanece como 0.

questionAnswers(6)

yourAnswerToTheQuestion