In order to understand why it is bigger, you need to understand how List<T>
works internally. Internally, a List<T>
uses an array (so T[]
) to store its contents.
This array starts off with a size of 4 elements, so equivalent to saying T[] array = new T[4]
. When you add an item to a List<T>
, it is stored in the array: the first item in array[0]
, the second in array[1]
, etc. The fifth item, however, can't fit into this array, as it's only four elements long. And because the length of an array can't be changed after it has been created, the only option is to take the contents of the array and move it to a new array that is large enough to hold that fifth item as well. The implementation of List<T>
chooses to double the size of the array buffer each time it runs out of space, so to fit the fifth item, it doubles the array capacity to 8. Then 16, and so on.
There is probably good mathematical backing on why it chooses to double, it's probably a good compromise between the expensive copy operations (don't want to allocate a new buffer too often) and wasted space. By doubling, the memory waste is never over 50% and the amount of times a new array needs to be allocated decreases logarithmically, I believe.