Python List vs Tuple vs Set vs Dict

Updated on: August 21, 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

    Programador pensando enquanto analisa código em dois monitores
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Learn Programming from Scratch: Logic and Projects

    Learn programming from scratch with a practical roadmap covering logic, languages, tools, exercises, projects, debugging, Git, and consistent study habits.

    Ler mais

    Tempo de leitura: 6 minutos
    10/07/2026
    ícone de loop com o texto 'For' abaixo
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python for Loops: Iterate over Lists and Data

    Learn Python for loops with sequences, range, enumerate, zip, dictionaries, nested loops, break, continue, comprehensions, and practical examples.

    Ler mais

    Tempo de leitura: 4 minutos
    10/07/2026
    Manipulação e formatação de strings em Python
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python Strings: Methods, Slicing, and Formatting

    Learn Python strings with creation, indexing, slicing, methods, formatting, Unicode, searching, validation, splitting, joining, and practical examples.

    Ler mais

    Tempo de leitura: 4 minutos
    10/07/2026
    código Python de uma tupla com o texto separado formando a frase "O que são tuplas?"
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python Tuples: Immutability and Unpacking

    Learn Python tuples with creation, packing, unpacking, indexing, immutability, methods, named records, function returns, and practical examples.

    Ler mais

    Tempo de leitura: 5 minutos
    10/07/2026
    símbolo de PI
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python Floats: Precision and Rounding

    Learn Python floats with decimal values, arithmetic, conversion, rounding, precision limits, comparisons, Decimal, math functions, and practical examples.

    Ler mais

    Tempo de leitura: 4 minutos
    10/07/2026
    notebook mostrando tela a teclado
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python I/O: input(), print(), and Files

    Learn Python input and output with input(), print(), conversions, validation, formatting, files, command-line arguments, and practical interactive programs.

    Ler mais

    Tempo de leitura: 4 minutos
    10/07/2026