If isDeepEquals is false, the IList equals operator (==) compares by identity.
If isDeepEquals is true (the default), the IList equals operator (==) compares all
items, ordered.
If cacheHashCode is true (the default), the IList will only calculate the hashCode
once, when it is asked — initially, internally null. Otherwise, it will always recalculate it.
If false, the hashCode will be calculated each time it's used.
If true (the default), the hashCode will be cached.
You should turn the cache off only if may use the immutable list
with mutable data.