In Python, a protocol is a group of operations or methods that a type must support if it is to implement that protocol. Protocols needn't be defined in the source code as separate interfaces or base classes as they would in a nominally typed language such as C# or Java. It's sufficient to simply have an object provide functioning implementations of those operations.
We can organize the different collections we have encountered in Python according to which protocols they support:
| Protocol | Implementing collections |
|---|---|
| Container | str, list, dict, range, tuple, set, bytes |
| Sized | str, list, dict, range, tuple, set, bytes |
| Iterable | str, list, dict, range, tuple, set, bytes |
| Sequence | str, list, tuple, range, bytes |
| Mutable Sequence | list |
| Mutable Set | set |
| Mutable Mapping | dict |
Support for a protocol demands specific behavior from a type.
...