Designing Data Structures in Python