Language > Data Types > Compound Data Types

# Compound Data Types

IDL’s compound data types provide ways to organize and manage data values of any data type. There are no constants for compound data types; the actual data values contained in a variable of a compound data type will always be of one or more of the basic data types.

IDL provides the following compound data types:

## Lists

Lists are ordered collections of values, where the individual list values can be of different data types. Lists can grow and shrink dynamically, and the data type of a given list element can be changed. For more information, refer to LIST.

## Hashes

Hashes are ordered or unordered collections of key-value pairs, where the individual keys and values can be of different data types. Hashes can grow and shrink dynamically, and the data type of a given hash element can be changed. For more information, refer to DICTIONARY, HASH, or ORDEREDHASH.

## Structures

Structures consist of one or more tag-value pairs, where the value associated with a given tag can be of any data type. Once a structure has been defined, no tags can be added or removed, and the data type of tag values cannot be changed. Structures are discussed in Structure References.

## Pointers

Pointers are references to dynamically-allocated heap variables that can contain values of any data type. Heap variables are available at all IDL program levels; as a result, pointers can be used to easily make data available to multiple routines without copying.

## Object References

Object references are references to special heap variables that contain IDL object structures.