A value list has a list of value objects.
As well as keeping the list, it keeps a map of them, keyed by their names. Because a value list can have a nested value list (a value can contain a value list, see ValueListValue), the top level value list can contain value objects nested to any depth. The value list is able to drill down into nested maps, to locate a value by name.
A value list can listen to an I/O attribute, and populate itself with values that are read into the attribute.