¡Los datasets o diccionarios en python son impresionantes! ¿Sabes por qué? Porque tienen la capacidad de acceder con gran rapidez a sus valores. ¿Cómo lo hacen? Pues la respuesta está en la función hash() y el concepto de hashing. Esta función sirve para comparar datos. Hoy en este artículo queremos explicarte con más detalle de qué se trata.
¿Qué es hash()?
La función hash() es una función incorporada en Python que genera un valor hash para un objeto. Este valor es un número entero que representa de forma única el contenido del objeto, siempre y cuando sea inmutable. Los valores hash son cruciales para estructuras como diccionarios y sets porque permiten realizar búsquedas rápidas.
Cuando usas hash(), el sistema toma el contenido del objeto, aplica un algoritmo de hashing y genera un número entero que representa ese contenido. Por ejemplo:
print(hash("Hola")) # Salida: un número entero
El valor hash que obtienes es único para el contenido del objeto (aunque pueden ocurrir colisiones, que veremos más adelante). Sin embargo, es importante saber que no puedes usar hash() con objetos mutables como listas o diccionarios, ya que estos pueden cambiar y hacer que el valor hash sea inconsistente.
Propiedades de hash()
Las propiedades de hash pueden resumirse en que:
- Solo funciona con objetos inmutables: Puedes usar hash() con números, cadenas, tuplas, etc., pero no con listas, conjuntos o diccionarios.
- Es irreversible: No puedes obtener el contenido original de un objeto a partir de su valor hash.
- Es rápido: Generar un hash es mucho más rápido que comparar objetos directamente, lo que lo hace ideal para búsquedas.
Situaciones en las que puedes usar hash()
Estas son las situaciones más comunes, pero existen otras tantas que puedes consultar y aprender. Veamos:
- Hashing de números, cadenas y tuplas: Puedes generar un hash para diferentes tipos de objetos inmutables:
print(hash(42)) # Salida: hash del número 42
print(hash("Python")) # Salida: hash de la cadena "Python"
print(hash((1, 2, 3))) # Salida: hash de la tupla (1, 2, 3)
🔴 ¿Quieres Aprender a Programar con Python? 🔴
Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semanaEn estos casos, hash() genera un número entero único basado en el contenido de cada objeto.
- Error con objetos mutables: Si intentas usar hash() con una lista o un diccionario, Python te devolverá un error:
mi_lista = [1, 2, 3]
print(hash(mi_lista)) # Genera un TypeError
Esto sucede porque las listas son mutables, y un cambio en el contenido haría que el valor hash ya no sea válido.
- Uso de hash() en diccionarios: Los valores hash se utilizan internamente en los diccionarios para buscar claves de forma eficiente. Por ejemplo, cuando haces esto:
mi_diccionario = {"clave": "valor"}
Python genera un valor hash para “clave” y lo utiliza para localizar su correspondiente “valor”.
- Crear objetos hashables personalizados: Puedes hacer que tus propios objetos sean hashables implementando los métodos __hash__() y __eq__() en una clase. Por ejemplo:
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def __hash__(self):
return hash((self.nombre, self.edad))
def __eq__(self, otro):
return self.nombre == otro.nombre and self.edad == otro.edad
p1 = Persona("Ana", 30)
p2 = Persona("Ana", 30)
print(hash(p1)) # Salida: un valor hash único
print(p1 == p2) # Salida: True
Interesante, ¿no? Ahora, si quieres acceder a la mejor información y aprender a programar tus primeros programas, te invitamos a unirte a nosotros en el bootcamp de programación para principiantes, en donde aprenderás no solo los fundamentos teóricos de la programación, sino que también podrás practicar los conocimientos adquiridos por medio de proyectos que te ayudarán a impulsar tu carrera en este mundo. ¡Comienza ahora y accede a las mejores oportunidades!