Data Structures and Algorithms with Object-Oriented Design Patterns in Python - Bruno R. Preiss