We looked at a number of ways to serialize Python objects. We can encode our class definitions in notations, including JSON, YAML, pickle, XML, and CSV. Each of these notations has a variety of advantages and disadvantages.
These various library modules generally work around the idea of loading objects from an external file or dumping objects into a file. These modules aren't completely consistent with each other, but they're very similar, allowing us to apply some common design patterns.
Using CSV and XML tends to expose the most difficult design problems. Our class definitions in Python can include object references that don't have a good representation in the CSV or XML notation.