Lists can contain other lists
As stated in , lists can contain items of any data type, including other lists. A list whose items are lists is called a nested list. For example, the following nested list describes life expectancies in different countries:
| | >>> life = [['Canada', 76.5], ['United States', 75.5], ['Mexico', 72.0]] |
Here is the memory model that results from the execution of that assignment statement:

Notice that each item in the outer list is itself a list of two items. Use the standard indexing notation to access the items in the outer list:
| | >>> life = [['Canada', 76.5], ['United States', 75.5], ['Mexico', 72.0]] |
| | >>> life[0] |
| | ['Canada', 76.5] |
| | >>> life[1] |
| | ['United States', 75.5] |
| | >>> life[2] |
| | ['Mexico', 72.0] |
Since each of these items is also a list, you can index it again, just as you can chain together method calls or nest function calls:
| | >>> life = [['Canada', 76.5], ['United States', 75.5], ['Mexico', 72.0]] |
| | >>> life[1] |
| | ['United States', 75.5] |
| | >>> life[1][0] |
| | 'United States' |
| | >>> life[1][1] |
| | 75.5 |
You can also assign inner lists to variables:
| | >>> life = [['Canada', 76.5], ['United States', 75.5], ['Mexico', 72.0]] |
| | >>> canada = life[0] |
| | >>> canada |
| | ['Canada', 76.5] |
| | >>> canada[0] |
| | 'Canada' |
| | >>> canada[1] |
| | 76.5 |
Assigning an inner list to a variable creates an alias for that list:

As before, any change you make through the inner list reference will be seen when you access the main list, and vice versa:
| | >>> life = [['Canada', 76.5], ['United States', 75.5], ['Mexico', 72.0]] |
| | >>> canada = life[0] |
| | >>> canada[1] = 80.0 |
| | >>> canada |
| | ['Canada', 80.0] |
| | >>> life |
| | [['Canada', 80.0], ['United States', 75.5], ['Mexico', 72.0]] |