🐍 Python Collection Data Types
⚖️ Quick Comparison Table
Type | Ordered | Mutable | Unique | Indexable | Duplicates Allowed | Notable Use Case |
---|---|---|---|---|---|---|
list | ✅ | ✅ | ❌ | ✅ | ✅ | General-purpose sequence |
tuple | ✅ | ❌ | ❌ | ✅ | ✅ | Fixed-size data |
set | ❌ | ✅ | ✅ | ❌ | ❌ | Unique elements, set operations |
frozenset | ❌ | ❌ | ✅ | ❌ | ❌ | Immutable set |
dict | ✅ | ✅ | ✅ (keys) | ✅ (by key) | ✅ (values only) | Key-value pairs |
deque | ✅ | ✅ | ❌ | Limited (0, -1) | ✅ | Fast double-ended queue |
namedtuple | ✅ | ❌ | ❌ | ✅, attr access | ✅ | Tuple with field names |
defaultdict | ✅ | ✅ | ✅ (keys) | ✅ (by key) | ✅ (values only) | Dict with auto-init for missing keys |
Counter | ✅ | ✅ | ✅ (keys) | ✅ (by key) | ✅ (values count duplicates) | Counting/frequency of elements |
🔹 dict
keys must be unique
🔹 Tuples can be used as dict keys if they’re hashtable
(no lists inside)
Immutable Data Types Table
Type | Description | Example |
int | Integer numbers | x = 10 |
float | Floating-point numbers | x = 3.14 |
bool | Boolean values | x = True |
str | String (sequence of characters) | x = "hello" |
tuple | Immutable ordered sequence | x = (1, 2, 3) |
frozenset | Immutable set | x = frozenset([1, 2, 3]) |
bytes | Immutable byte sequence | x = b'data' |
complex | Complex numbers | x = 2 + 3j |
NoneType | Represents 'no value' | x = None |
Collection Operations Time Complexity(BigO) Table
Collection | Operation | Time Complexity | Example |
list | Indexing | O(1) | x = lst[2] |
list | Append | O(1) amortized | lst.append(10) |
list | Insert (start/middle) | O(n) | lst.insert(1, 99) |
list | Pop (end) | O(1) | x = lst.pop() |
list | Pop (start) | O(n) | x = lst.pop(0) |
list | Remove by value | O(n) | lst.remove(10) |
list | Membership test | O(n) | if 5 in lst: pass |
list | Iteration | O(n) | for x in lst: pass |
list | Sort | O(n log n) | lst.sort() |
list | Slicing | O(k) | sub = lst[1:4] |
tuple | Indexing | O(1) | x = tpl[1] |
tuple | Membership test | O(n) | if 3 in tpl: pass |
tuple | Iteration | O(n) | for x in tpl: pass |
tuple | Concatenation | O(n + m) | tpl3 = tpl1 + tpl2 |
tuple | Slicing | O(k) | sub = tpl[1:3] |
set | Add | O(1) | s.add(5) |
set | Remove | O(1) | s.remove(5) |
set | Membership test | O(1) | if 5 in s: pass |
set | Iteration | O(n) | for x in s: pass |
frozenset | Membership test | O(1) | if 2 in fs: pass |
frozenset | Iteration | O(n) | for x in fs: pass |
dict | Get | O(1) | x = d['key'] |
dict | Set | O(1) | d['key'] = 10 |
dict | Delete | O(1) | del d['key'] |
dict | Membership test | O(1) | if 'key' in d: pass |
dict | Iteration | O(n) | for k, v in d.items(): pass |
📦 1. list
- ✅ Mutable
- ✅ Ordered
- ❌ Not Unique
- ✅ Indexable
- ✅ Duplicates allowed
Use case: Dynamic, ordered collections with duplicates.
my_list = [1, 2, 3, 4]
my_list.append(4)
my_list.insert(0, 0)
my_list[0] = 10
🔒 2. tuple
- ❌ Immutable
- ✅ Ordered
- ❌ Not Unique
- ✅ Indexable
- ✅ Duplicates allowed
Use case: Fixed-size data, coordinates, function return values.
position = (10, 20)
# position[0] = 5 # ❌ Error
🧺 3. set
- ✅ Mutable
- ❌ Unordered
- ✅ Unique
- ❌ Indexable
- ❌ Duplicates not allowed
Use case: Unordered collections with no duplicates, set operations.
unique_items = {1, 2, 3}
unique_items.add(4)
unique_items.discard(2)
🧭 4. dict
- ✅ Mutable
- ✅ Ordered (Python 3.7+)
- ✅ Unique keys
- ✅ Key-based access
- ✅ Duplicates allowed for values
Use case: Fast key-value lookup, structured data.
person = {"name": "Alice", "age": 30}
person["age"] = 31
🧊 5. frozenset
- ❌ Immutable
- ❌ Unordered
- ✅ Unique
- ❌ Indexable
- ❌ Duplicates not allowed
Use case: Hashtable
version of set, usable as dict
or set
key.
fset = frozenset([1, 2, 3])
# fset.add(4) # ❌ Error
📚 6. collections.deque
- ✅ Mutable
- ✅ Ordered
- ❌ Not Unique
- ✅ Indexable (partial)
- ✅ Duplicates allowed
Use case: Fast appends/pops from both ends (queue/stack).
from collections import deque
dq = deque([1, 2, 3])
dq.appendleft(0)
dq.pop()
📊 7. collections.namedtuple
- ❌ Immutable
- ✅ Ordered
- ❌ Unique not enforced
- ✅ Indexable and attribute access
Use case: Tuple with named fields, lightweight class alternative.
from collections import namedtuple
Point = namedtuple("Point", "x y")
p = Point(10, 20)
print(p.x, p[1])
📐 8. collections.defaultdict
- ✅ Mutable
- ✅ Ordered (Python 3.7+)
- ✅ Unique keys
- ✅ Key-based access
Use case: Dict with default factory (no KeyError on missing keys).
from collections import defaultdict
d = defaultdict(int)
d["a"] += 1
🔁 9. collections.Counter
- ✅ Mutable
- ✅ Ordered (in output)
- ✅ Unique keys
- ✅ Key-based access
Use case: Count frequency of items (e.g., words, characters).
from collections import Counter
c = Counter("banana")
print(c["a"]) # 3
Exercises
NamedTuple
from typing import NamedTuple
class Point(NamedTuple):
x: float
y: float
p = Point(1.5, 2.5)
print(p.x, p.y) # 1.5 2.5
print(p[0], p[1]) # 1.5 2.5
class Color(NamedTuple):
red: int
green: int
blue: int
white = Color(255, 255, 255)
print(white.red) # 255
class ApiResponse(NamedTuple):
status_code: int
message: str
data: dict
res = ApiResponse(200, "OK", {"user": "kenan"})
print(res.status_code, res.data["user"]) # 200 kenan
Tuples
A tuple is a collection which is ordered and unchangeable or immutable.



