← Python na prática
02 / 10 · 23 MIN

Coleções sem surpresas

Escolhe listas, conjuntos e dicionários para o problema certo.

A estrutura faz parte da solução

Uma lista mantém uma sequência e permite elementos repetidos. Um conjunto representa valores únicos e suporta testes de pertença. Um dicionário associa chaves a valores. Escolhe a estrutura a partir do significado dos dados, não apenas da sintaxe mais curta.

Partilhar e copiar

A atribuição b = a não copia uma lista: ambos os nomes referenciam o mesmo objeto. Uma cópia superficial cria uma nova lista, mas objetos mutáveis internos podem continuar partilhados. Antes de alterar uma estrutura, percebe quem mais depende dela.

Aplicação guiada no trabalho

Um importador precisa de contar IDs únicos e manter a ordem original para auditoria. Usa um conjunto para pertença quando a ordem não interessa, mas conserva a sequência se o contrato a exigir. Não assumas que ordenar elimina duplicados. Quando passas uma lista para uma função, a atribuição partilha o objeto; append pode ser visível no chamador. Uma cópia superficial separa a lista exterior, mas deixa listas ou dicionários interiores partilhados. Decide se pretendes mutação, cópia superficial ou uma reconstrução dos campos necessários. Confirma também o valor devolvido pelos métodos: ids.sort() modifica ids e devolve None; sorted(ids) devolve uma nova lista. Esta distinção explica muitos resultados inesperados sem culpar concorrência ou a origem dos dados.

Duplicados antes de construir um mapping

Um dict criado a partir de pares repetidos conserva apenas um valor por chave. Se as linhas deveriam ter IDs únicos, verifica a repetição enquanto a lista ou o fluxo ainda conserva cada ocorrência. Contar as chaves do mapping final não recupera as linhas substituídas. Define rejeição, reconciliação ou atualização conforme o contrato; a escolha do construtor não deve decidir silenciosamente a política de negócio.

Preservar ordem e multiplicidade

A ordenação de listas é estável: elementos com a mesma chave mantêm a ordem relativa de entrada. Não acrescenta automaticamente outro critério de negócio. Na reconciliação, distingue presença de frequência. set elimina repetições, enquanto Counter construído a partir de IDs hashable conserva quantas vezes cada um apareceu. Duas listas com o mesmo tamanho e o mesmo conjunto podem ter contagens diferentes por ID. Escolhe a representação pela informação que o contrato precisa de preservar.

owners = {"batch": "ops", "report": "data"}
team = owners.get("api", "unassigned")
unique_ids = set([101, 101, 102])
NA PRÁTICA

Queres contar ficheiros únicos recebidos por dia. Um conjunto evita duplicados, mas perde a ordem de chegada. Se a ordem tiver significado, mantém também a sequência original.

Armadilhas comuns

Assumir cópia na atribuição; esquecer objetos interiores partilhados; atribuir o retorno de sort.

Tópicos relacionados: Funções pequenas, contratos claros · Erros e ficheiros com contexto

Leva esta ideia contigo

Uma atribuição partilha referências. Escolhe a coleção e a profundidade da cópia de forma consciente.

Criar conta

Referência: Python 3.14: Shallow and deep copying · Python 3.14; DR Python 2026.3

Python® é uma marca registada de Python Software Foundation. A dr.pt é uma plataforma de preparação independente e não está afiliada, associada, patrocinada, autorizada nem aprovada por Python Software Foundation. Os conteúdos e as perguntas são originais, não são perguntas oficiais de exame, e concluir os nossos testes não atribui nem garante qualquer certificação. Os nomes são usados apenas para identificar o tema. Todas as outras marcas pertencem aos respetivos titulares.