Introduction
Compare and contrast namedtuples with data classes for different use cases.
NamedTuple vs DataClass
from collections import namedtuple
from dataclasses import dataclass
# Named tuple (immutable)
NTPoint = namedtuple('Point', ['x', 'y'])
# Data class (mutable by default)
@dataclass
class DCPoint:
x: float
y: float
When to Use Each
| Feature | NamedTuple | DataClass |
|---|---|---|
| Mutability | Immutable | Mutable/Immutable |
| Memory | Smaller | Larger |
| Methods | Limited | Full class |
| Inheritance | Limited | Full support |
| Default values | Via defaults | Easy |
Data Class with Options
from dataclasses import dataclass, field
@dataclass(frozen=True) # Immutable
class ImmutablePoint:
x: float
y: float
@dataclass(order=True) # Comparable
class SortedPoint:
x: float = field(compare=True)
y: float = field(compare=False)
Practice Problems
- Migrate namedtuple to dataclass
- Use frozen dataclass for constants
- Compare memory usage of both
- Implement post_init validation
- Create recursive dataclass structure