When an instance of an object of a class, say Foo, is inserted in a collection like List<T> or Dictionary<TKey, TValue>, do collections create new instance of Foo and inserts it or they refer to same instance created before inserting into collections?