Skip to content

Errores comunes con sets en Python (y cómo evitarlos)

Ben Kemp | Python/SQL/PowerBI/Excel Tutorials edited this page Jan 12, 2026 · 1 revision

Errores comunes con sets en Python (y cómo evitarlos)

Los sets en Python son muy potentes para eliminar duplicados y realizar operaciones de conjuntos,
pero su naturaleza no ordenada y ciertas particularidades generan errores frecuentes.

Esta página muestra errores reales, explica por qué ocurren y cómo evitarlos correctamente.


Error 1: Asumir que los sets mantienen el orden

datos = {3, 1, 2}
print(datos)

Salida (orden no garantizado):

{1, 2, 3}

⚠ El orden puede cambiar entre ejecuciones.

Cómo evitarlo:

ordenados = sorted(datos)

Error 2: Intentar acceder por índice

conjunto = {10, 20, 30}
print(conjunto[0])

Salida:

TypeError: 'set' object is not subscriptable

Cómo evitarlo: Usa listas si necesitas acceso por índice:

lista = list(conjunto)
print(lista[0])

Error 3: Crear un set vacío con {}

vacio = {}
print(type(vacio))

Salida:

<class 'dict'>

❌ Esto crea un diccionario.

Cómo evitarlo:

vacio = set()

Error 4: Usar remove() sin comprobar existencia

numeros = {1, 2, 3}
numeros.remove(4)

Salida:

KeyError: 4

Cómo evitarlo:

numeros.discard(4)

Error 5: Intentar añadir elementos no hashables

conjunto = set()
conjunto.add([1, 2])

Salida:

TypeError: unhashable type: 'list'

Cómo evitarlo:

conjunto.add((1, 2))

✔ Usa tuplas (inmutables).

Error 6: Pensar que los sets permiten duplicados

valores = {1, 2, 2, 3}
print(valores)

Salida:

{1, 2, 3}

⚠ Los duplicados se eliminan automáticamente.

Cómo evitar confusión: Usa listas si necesitas duplicados.

Error 7: Modificar un set mientras se itera

numeros = {1, 2, 3, 4}

for n in numeros:
    if n % 2 == 0:
        numeros.remove(n)

Salida:

RuntimeError: Set changed size during iteration

Cómo evitarlo:

for n in set(numeros):
    if n % 2 == 0:
        numeros.remove(n)

Error 8: Usar sets cuando el orden importa

dias = {"lunes", "martes", "miércoles"}

⚠ El orden no está garantizado.

Cómo evitarlo: Usa listas si el orden es relevante.

Error 9: Confundir set() con frozenset()

fs = frozenset([1, 2, 3])
fs.add(4)

Salida:

AttributeError: 'frozenset' object has no attribute 'add'

Cómo evitarlo: Usa set() si necesitas modificar el conjunto.

Error 10: Usar sets cuando un diccionario sería mejor

usuarios = {"Ana", "Luis", "Marta"}

⚠ No puedes asociar datos adicionales.

Cómo evitarlo:

usuarios = {
    "Ana": 30,
    "Luis": 25,
    "Marta": 28
}

Reglas prácticas para evitar errores con sets

  • No dependas del orden
  • No intentes acceder por índice
  • Usa discard() cuando no estés seguro
  • Recuerda que no admiten duplicados
  • Usa listas o diccionarios cuando el caso lo requiera

Conclusión

Los sets son ideales para pertenencia y operaciones de conjuntos, pero no sustituyen a listas ni diccionarios.

Usarlos correctamente hace tu código:

  • Más eficiente
  • Más claro
  • Menos propenso a errores

Clone this wiki locally