Cenário: argumento default mutável
Pergunta
Por que `def add(item, lista=[]): lista.append(item); return lista` se comporta de forma inesperada quando chamada várias vezes sem passar `lista`?
Resposta esperada
O valor default é avaliado UMA vez, quando a função é definida, não a cada chamada. Então existe uma única lista compartilhada entre todas as chamadas que omitem o argumento: a primeira chamada retorna `[a]`, a segunda `[a, b]`, e assim por diante — o estado vaza entre chamadas. A correção idiomática é `def add(item, lista=None): if lista is None: lista = []` — assim uma lista nova nasce a cada chamada. Vale pra qualquer default mutável (list, dict, set) e é uma das pegadinhas mais cobradas em entrevista de Python.
Por que perguntam isso
Cenário pleno. Quem já levou esse bug em produção responde na hora e sabe o remédio (`=None`). Quem nunca viu costuma insistir que 'deveria começar vazia toda vez'.