Member(name) with a borrowed list, and Library seeded with a dict of title → copy count. Library.lend(title, member) decrements stock and appends to the member's list, returning True; it returns False when out of stock or unknown. Library.give_back(title, member) reverses it (only if the member actually holds the title).lib = Library({'Dune': 1}); m = Member('Ana'); lib.lend('Dune', m); lib.lend('Dune', Member('Raj'))True then False
The single copy went to Ana; Raj is refused.
The library mutates both its stock and the member object.
Guard clauses keep each method short.