Python Sets: Operations, Methods & Set Theory

Master sets in Python. Learn to store unique values, execute intersections, unions, differences, and understand the performance benefits of hashing.

Try Python Sets Code

Overview

A Set is an unordered collection of unique elements in Python. Sets are built on hash tables, which makes them highly optimized for membership testing—determining whether a specific element is inside the collection. While checking if an item is in a list requires scanning every item (an `O(N)` operation), checking membership in a set runs in `O(1)` constant time. This makes sets incredibly powerful for duplicate elimination and bulk data filtering.

Sets are initialized using curly braces `{}` containing values (without colons) or by using the built-in `set()` constructor. Note that since curly braces are also used for dictionaries, writing empty curly braces `{}` initializes an empty dictionary. To initialize an empty set, you must use `set()`. Elements inside a set must be hashable and immutable, which means you can store numbers, strings, and tuples, but you cannot store lists or dictionaries inside a set.

Beyond basic addition and deletion methods, Python sets natively support operations from mathematical Set Theory. This includes Union (`|` or `.union()`) to merge collections, Intersection (`&` or `.intersection()`) to find common elements, Difference (`-` or `.difference()`) to find elements unique to one collection, and Symmetric Difference (`^`) to retrieve items in either set but not both. Mastering sets allows you to solve complex grouping problems with clean, performant, and readable code.

Code Example

Removing duplicates from a list and performing mathematical set operations.

sets_demo.py
Try in Editor
# Removing duplicates
roles_list = ["admin", "user", "editor", "admin", "user"]
# Sort the set to guarantee deterministic printed output
unique_roles = sorted(list(set(roles_list)))
print(f"Unique roles: {unique_roles}")

# Set operations
dev_skills = {"python", "javascript", "sql"}
ops_skills = {"sql", "docker", "kubernetes"}

# Union and Intersection (sorted for deterministic output)
all_skills = sorted(list(dev_skills | ops_skills))
common_skills = sorted(list(dev_skills & ops_skills))
unique_to_dev = sorted(list(dev_skills - ops_skills))

print(f"Union: {all_skills}")
print(f"Intersection: {common_skills}")
print(f"Dev only: {unique_to_dev}")
Terminal Output
Unique roles: ['admin', 'editor', 'user']
Union: ['docker', 'javascript', 'kubernetes', 'python', 'sql']
Intersection: ['sql']
Dev only: ['javascript', 'python']

Real-world Use Cases

  • Removing duplicate entries from API results or CSV files
  • Determining common elements between two databases
  • Performing fast lookup operations on large ID lists

Frequently Asked Questions

Are elements in a set ordered?

No, sets are unordered. You cannot access elements by an index (like set[0]) or slice them.

How do I add or remove elements in a set?

Use the .add() method to insert a single element, and .remove() or .discard() to remove one. .discard() is safer as it does not throw an error if the element is missing.

Keep Learning

Recommended Python Resources

Expand your knowledge with related interactive tutorials, cheat sheets, and code comparisons.