Estructura interna del diccionario de Python

Dictionary en Python es una colección desordenada de valores de datos, que se utiliza para almacenar valores de datos como un mapa, que a diferencia de otros tipos de datos que contienen solo un valor como elemento, Dictionary contiene un par clave: valor . El valor-clave se proporciona en el diccionario para hacerlo más optimizado

El diccionario consta de varios cubos. Cada uno de estos cubos contiene el código hash del objeto que contiene el par clave-valor. Un puntero al objeto clave y un puntero al objeto de valor.

El siguiente diagrama muestra la estructura interna del diccionario:

El diccionario comienza con 8 baldes vacíos. Esto luego se redimensiona duplicando el número de entradas cada vez que se alcanza su capacidad. Esto suma al menos 12 bytes en una máquina de 32 bits y 24 bytes en una máquina de 64 bits

Ejemplo 1: un diccionario de Python vacío consume 240 bytes

Python3

# code
import sys
 
d = {}
print(sys.getsizeof(d))

Producción:

240

Ejemplo 2 . La primera vez que creamos un diccionario, contiene solo 8 espacios que se pueden llenar con pares clave-valor.

Python3

# code
import sys
 
d = {}
d['python'] = 1
print(sys.getsizeof(d))

Producción:

240

Como puede ver, el tamaño del diccionario sigue siendo el mismo después de agregarle algo. El diccionario se almacena en el balde que aún no está lleno.

Ejemplo 3: 

Los valores-clave no se almacenan en el propio diccionario. El tamaño del diccionario no cambia aunque aumentemos el tamaño de su valor.

Python3

import sys
 
d = {}
d['a'] = 'a' * 100000
print("Size of dictionary ->", sys.getsizeof(d))
print("Size of a ->", sys.getsizeof('a'))
Producción

Size of dictionary -> 240
Size of a -> 50

Producción:

Size of dictionary -> 240
Size of a -> 50

Ejemplo 4: si eliminamos los elementos de un diccionario, el tamaño del diccionario seguirá siendo el mismo.

Python3

# code
import sys
 
d = {}
d['python'] = 1
for key in list(d.keys()):
  d.pop(key)
   
print(len(d))
print(sys.getsizeof(d))

Producción:

0
240

Aquí puede ver que el diccionario no ha liberado la memoria que ha asignado. Elimina la referencia de la tabla hash pero el valor está en la memoria. Dado que no está asignado, puede convertirse en parte de la recolección de basura.

Ejemplo 5: si vaciamos el diccionario usando el método claro, el tamaño es 72 bytes menos que el diccionario vacío inicializado, es decir, 240 bytes

Python3

import sys
 
d = {}
d['python'] = 1
for key in list(d.keys()):
  d.pop(key)
   
print(len(d))
d.clear()
print(sys.getsizeof(d))

Producción:

0
72

Esto se debe a que el método borra la memoria. También borra el espacio predeterminado inicial, es decir, 8 cubos asignados dentro del diccionario.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *