2012-04-30 54 views
7

Necesito saber el tamaño de los objetos en mi programa python. Tengo for lazo en el que necesito saber el tamaño de los objetos. Si uso sys.getsizeof, entonces la memoria no se libera al instante y no puedo ver el tamaño real. ¿Hay forma de hacerlo?python. obtener el tamaño de un objeto

Mis objetos son json y cadena. En el peor de los casos, puedo guardarlos en un archivo y mirar los tamaños de archivo. Pero, ¿cómo puedo ver en el tamaño de archivo del código python?

Editar: el tamaño de los objetos serializados es más importante para mí. así que la segunda parte de la pregunta es esencial.

Gracias.

+0

El tamaño de un archivo (que representa la forma serializada de un objeto) en el disco no se corresponde necesariamente con la cantidad de memoria ocupada por el objeto correspondiente. ¿Por qué necesitas saber el tamaño? ¿Te preocupa el consumo de memoria? ¿Cuál es el problema más grande que estás tratando de resolver? –

+0

¿Qué intenta exactamente hacer con esta información? Puede haber un camino más simplificado para su objetivo. –

+0

¿Para qué necesita esto? Hay varios tipos de "tamaños". – hamstergene

Respuesta

11

Teniendo en cuenta que type(json.dumps(something))==str debería poder literalmente simplemente usar len.

Considérese el siguiente

obj = {'content' : 'something goes here'} 
json_obj = json.dumps(obj) 
json_size = len(json_obj) 

serialized_size = len(serialized_object) 

if json_size < serialized_size: 
    print "I'd use the JSON with this..." 
+3

Me gustaría seguir con esto desde que publiqué esto en 2012. Esto es aplicable a python 2.7. En Python 3 cadenas intrínsecamente admiten caracteres Unicode y por lo tanto no es seguro asumir que el 'len (str_object)' es igual al número de bytes dado que los caracteres Unicode no son necesariamente de 1 byte cada uno. En python 3 puedes hacer 'len (json_obj.encode (" utf-8 "))' que debe ser el número de bytes. – lukecampbell

+0

Es muy probable que el objeto serializado también se codifique como utf-8. Si los datos están en ASCII, o más o menos lo mismo en ambos formatos, el consejo original no solo es útil sino también bastante preciso. Sin embargo, espero que esto pueda actualizarse para proporcionar la longitud verdadera en bytes. Aunque no estoy lo suficientemente informado como para proponer una edición. – bitchaser

Cuestiones relacionadas