When looking at a blackjack Hand object, we have an interesting special case for containment. We often want to know if there's an ace in the hand. If we define Hand as an extension of list, then we can't ask for a generic ace. We can only ask for specific cards. We have to write something like the following example:
any(c.rank == 'A' for c in hand.cards)
This examines each card serially. For a small collection where the checking is rare, the design has few consequences. If, on the other hand, we simulated millions of hands, this search would be repeated often enough that the cost would be troubling.
For other problem domains, where the collection may contain millions of items, we certainly can't scan millions of items serially. A better scheme for a collection of objects can be helpful. Ideally, we'd like something like...