Diferencia entre el método __sizeof__() y getsizeof() en Python
El método __sizeof__() y el método getsizeof() se utilizan para obtener el tamaño de los objetos utilizados en el programa. El método getsizeof() devuelve una sobrecarga adicional para la recolección de basura junto con el tamaño de cada elemento de la lista. El método __sizeof__() devuelve el tamaño real del objeto sin ninguna sobrecarga. En este artículo veremos cómo podemos diferenciar estos operadores en Python.
The __sizeof__() operator returns the size of the object without any extra overhead for garbage collection.
El operador getsizeof() devuelve el tamaño del objeto con una sobrecarga adicional para la recolección de basura.</p>
It returns 40 bytes for an empty list and 8 bytes for each additional list element.
Devuelve 64 bytes para una lista vacía y 8 bytes para cada elemento adicional de la lista.</p>
It is not system specific and returns the same value on any system.
Es un método específico del sistema, es decir, el valor devuelto por este método depende del tipo de sistema en el que se ejecuta.</p>
Importing the sys module is not required for __sizeof__() function to execute.
El módulo sys es necesario antes de usar el método getsizeof().</p>
Usando el operador getsizeof()
El operador getsizeof() llama internamente al operador __sizeof__() y agrega una sobrecarga adicional al devolver el tamaño del objeto para la recolección de basura. Devuelve 64 bytes (dependiendo del sistema puede variar) para una lista vacía y 8 bytes para cada elemento de la lista.
Ejemplo
import sys
empty_list=[]
a =[34, 22]
b =[45, 56, 5, 60]
c =[23, 28, 38, 40]
d =[2, 3, 1, 4, 66, 54, 45, 89]
print(sys.getsizeof(empty_list))
print(sys.getsizeof(a))
print(sys.getsizeof(b))
print(sys.getsizeof(c))
print(sys.getsizeof(d))
Producción
56
72
88
88
120
Explicación
En el ejemplo anterior, definimos una lista con longitudes 0,2,4,4,8. Cuando encontramos el tamaño de la lista usando el operador __sizeof__() el tamaño de la lista vacía se devuelve 56. Puede variar dependiendo del tamaño del sistema que estemos usando. Por cada elemento adicional de la lista, se añaden 8 bytes al tamaño. Entonces la lista con dos valores devuelve un tamaño de 72 (56+16). De manera similar, enumera b, cyd con valores de 4, 4 y 8, tamaños de retorno de 88, 88 y 120 bytes respectivamente.
Usando la función __sizeof__()
La función __sizeof__() devuelve el tamaño del objeto sin ninguna sobrecarga para la recolección de basura. Para una lista vacía, devuelve un tamaño de 40 bytes y por cada elemento adicional de la lista, agrega 8 bytes al tamaño.
Ejemplo
w =[1, 2]
x =[4, 5, 7, 9]
y =[2, 8, 6, 56, 45, 89, 88]
z =[54, 45, 12, 23, 24, 90, 20, 40]
print(w.__sizeof__())
print(x.__sizeof__())
print(y.__sizeof__())
print(z.__sizeof__())
Producción
56
72
104
104
Conclusión
En este artículo, analizamos la diferencia entre la función __sizeof__() y el método getsizeof() que se utilizan para obtener el tamaño del objeto. El método getsizeof() llama internamente al método __sizeof__() y agrega bytes adicionales para la recolección de basura. La función sizeof() devuelve el tamaño del objeto sin agregar ninguna sobrecarga adicional para la recolección de basura.