Python List vs Tuple vs Set vs Dictionary

Published on: July 10, 2026
Reading time: 5 minutes
Logo do Python com símbolos de lista, tupla e dicionário

Python provides several built-in collection types, but beginners often wonder which one to choose. The most common options are list, tuple, set, and dictionary. They can all store multiple values, yet they have different rules for ordering, duplicates, mutability, and access.

This guide compares the four structures with practical examples. By the end, you will know when a list is the best choice, when a tuple communicates fixed data, when a set improves membership checks, and when a dictionary is ideal for key-value information.

For a broader introduction, review the Python data types guide and the official Python data structures tutorial.

Quick Comparison

TypeOrderedMutableDuplicatesMain Access
ListYesYesYesIndex
TupleYesNoYesIndex
SetNo positional orderYesNoMembership
DictionaryInsertion orderYesKeys are uniqueKey

“Ordered” means that the collection preserves a meaningful sequence for iteration. A set should not be used when you need a stable position such as “the first item.”

Python Lists

A list is an ordered, mutable collection. It is usually the default choice when you need a sequence that can grow or change.

languages = ["Python", "JavaScript", "Go"]

print(languages[0])
languages.append("Rust")
languages[1] = "TypeScript"
print(languages)

Lists allow duplicate values:

scores = [10, 8, 10, 7]
print(scores.count(10))  # 2

Useful List Methods

  • append(value): add one item.
  • extend(iterable): add several items.
  • insert(index, value): insert at a position.
  • remove(value): remove the first matching item.
  • pop(): remove and return an item.
  • sort(): sort the list in place.

The complete Python lists guide covers slicing and common methods in more detail.

Python Tuples

A tuple is an ordered collection that cannot be changed after creation. This property is called immutability.

point = (12, 8)
print(point[0])

# point[0] = 20  # TypeError

Tuples work well for fixed records such as coordinates, RGB values, database rows, or values returned together from a function.

def dimensions():
    return 1920, 1080

width, height = dimensions()
print(width, height)

A single-item tuple needs a trailing comma:

not_a_tuple = (5)
one_item_tuple = (5,)

print(type(not_a_tuple))
print(type(one_item_tuple))

Python Sets

A set stores unique, hashable values. It is especially useful for removing duplicates and checking membership efficiently.

tags = {"python", "api", "python", "web"}
print(tags)
print("api" in tags)

Create an empty set with set(). Empty braces create a dictionary:

empty_set = set()
empty_dict = {}

Set Operations

backend = {"Python", "Go", "Java"}
data = {"Python", "R", "Julia"}

print(backend | data)  # union
print(backend & data)  # intersection
print(backend - data)  # difference
print(backend ^ data)  # symmetric difference

The Python in operator guide explains membership tests across different collections.

Python Dictionaries

A dictionary maps unique keys to values. It is the natural choice for structured information where each value has a meaningful label.

student = {
    "name": "Maya",
    "age": 24,
    "course": "Python",
}

print(student["name"])
student["age"] = 25
student["active"] = True

Use get() when a key may be missing:

city = student.get("city", "Unknown")
print(city)

Iterate through keys and values with items():

for key, value in student.items():
    print(f"{key}: {value}")

Mutability Explained

Lists, sets, and dictionaries are mutable. You can add, remove, or replace their contents. Tuples are immutable.

Mutability matters when the same object is shared by several variables:

first = [1, 2, 3]
second = first
second.append(4)

print(first)  # [1, 2, 3, 4]

Both names refer to the same list. Create a shallow copy when you need an independent top-level list:

second = first.copy()

Hashable Values and Dictionary Keys

Set members and dictionary keys must be hashable. Immutable values such as strings, numbers, and tuples of hashable items normally work. Lists and dictionaries do not.

locations = {
    (40.7128, -74.0060): "New York",
    (51.5072, -0.1276): "London",
}

This is one reason tuples are useful: they can represent a fixed compound key.

Convert Between Collection Types

numbers = [3, 1, 3, 2]

unique = set(numbers)
ordered_unique = list(dict.fromkeys(numbers))
as_tuple = tuple(numbers)

print(unique)
print(ordered_unique)
print(as_tuple)

list(dict.fromkeys(numbers)) removes duplicates while preserving the first occurrence order.

Choose the Right Collection

Use a List When

  • Order matters.
  • Values may repeat.
  • You need to append, remove, or reorder items.
  • You access items by index or slice.

Use a Tuple When

  • The group of values should not change.
  • You want to communicate a fixed record.
  • The value may be used as a dictionary key.
  • A function returns several related values.

Use a Set When

  • Every value should be unique.
  • Fast membership checks are important.
  • You need union, intersection, or difference.
  • Positional order is not required.

Use a Dictionary When

  • Each value has a meaningful key.
  • You need quick lookup by identifier.
  • You are representing records or configuration.
  • You are counting, grouping, or indexing data.

Practical Example: Organize Course Data

course = {
    "title": "Python Fundamentals",
    "topics": ["variables", "loops", "functions", "lists"],
    "instructors": ("Alex", "Sam"),
    "required_tools": {"Python", "VS Code"},
}

course["topics"].append("dictionaries")

for topic in course["topics"]:
    print(topic)

print("Python" in course["required_tools"])

This example combines all four types. The dictionary labels each category, the list stores an editable sequence, the tuple stores a fixed instructor pair, and the set guarantees unique tool names.

Comprehensions

Python can build lists, sets, and dictionaries with concise comprehension syntax:

numbers = range(1, 6)

squares_list = [number ** 2 for number in numbers]
squares_set = {number ** 2 for number in numbers}
squares_dict = {number: number ** 2 for number in numbers}

Read the list comprehensions guide before using complex nested expressions.

Performance Considerations

Choosing a collection should begin with meaning and correctness, not micro-optimization. Still, a few general patterns matter:

  • Lists and tuples provide direct indexed access.
  • Sets and dictionaries usually provide fast membership and key lookup.
  • Checking membership repeatedly in a large list can be slower than using a set.
  • Tuples may use slightly less memory than equivalent lists, but clarity is the main reason to choose them.

The Python documentation for built-in types provides exact behavior and method references.

Common Mistakes

  • Using {} when you intend to create an empty set.
  • Expecting a set to preserve positional order.
  • Using a mutable list as a dictionary key.
  • Accessing a missing dictionary key with brackets when get() is safer.
  • Choosing a tuple only because it looks shorter.
  • Modifying a list while iterating over it.

For clean loops over collections, see enumerate() and sort() vs sorted().

Frequently Asked Questions

Is a tuple always faster than a list?

Some operations may be slightly cheaper, but the correct semantic choice matters more. Use a tuple for fixed data and a list for editable sequences.

Can a set contain dictionaries?

No. Dictionaries are mutable and not hashable.

Do dictionaries preserve order?

Modern Python dictionaries preserve insertion order. Access is still based on keys, not numeric positions.

How do I remove duplicates but keep order?

Use list(dict.fromkeys(values)) for hashable values.

Conclusion

Use lists for editable sequences, tuples for fixed records, sets for uniqueness and membership, and dictionaries for key-value data. The best choice describes the meaning of your information and makes later code easier to understand.

Practice by taking one small program and replacing a collection type. Observe which operations become clearer and which no longer fit. That comparison builds stronger intuition than memorizing rules alone.

Share:

Facebook
WhatsApp
Twitter
LinkedIn

Article content

    Related articles

    Código Python com valores Boolean True e False em tela de computador
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python Booleans: True, False, and Logic

    Learn Python booleans with True and False, comparison and logical operators, truthy and falsy values, identity, membership, short-circuiting, and validation.

    Ler mais

    Tempo de leitura: 5 minutos
    10/07/2026
    Símbolo de repetição ao lado do logotipo do Python pensativo, representando o conceito de loops na programação em Python.
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python Loops: for and while Explained

    Learn Python loops with for, while, range, break, continue, else, enumerate, zip, nested loops, input validation, common mistakes, and practical

    Ler mais

    Tempo de leitura: 5 minutos
    10/07/2026
    Código Python mostrando uma função recursiva de fatorial com condição if e chamada da função dentro dela
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python Recursion: Beginner Guide with Examples

    Learn Python recursion with base cases, recursive calls, stack behavior, factorial, Fibonacci, trees, directories, memoization, limits, and when loops are

    Ler mais

    Tempo de leitura: 5 minutos
    10/07/2026
    Uso do operador in em Python para verificação em coleções
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python in Operator: Membership Tests Explained

    Learn the Python in operator with strings, lists, sets, dictionaries, ranges, generators, custom classes, not in, and efficient membership.

    Ler mais

    Tempo de leitura: 5 minutos
    10/07/2026
    Introdução ao Python para iniciantes
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python List Comprehensions: Complete Beginner Guide

    Learn Python list comprehensions with transformations, filters, conditions, nested loops, dictionaries, sets, generators, and style tips.

    Ler mais

    Tempo de leitura: 5 minutos
    10/07/2026
    Leitura e escrita de arquivos CSV em Python
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python CSV Files: Read, Write, and Process Data

    Learn to read, write, filter, validate, and transform Python CSV files with reader, writer, DictReader, DictWriter, encoding, and streaming.

    Ler mais

    Tempo de leitura: 5 minutos
    10/07/2026