[Python-es] StringIO vs string

Antonio Fernandez Porrua a.porrua en gmail.com
Jue Abr 1 19:28:54 CEST 2010


Hola, tenía que convertir un long a un string, para ello iba a utilizar una
función de pycrypto

el meollo del asunto lo hace el siguiente código
    s = ''
    n = long(n)
    pack = struct.pack
    while n > 0:
        s = pack('>I', n & 0xffffffffL) + s
        n = n >> 32

y he visto que suman strings, yo tenía entendido que los strings son
inmutables, y que para añadir caracteres a un string hay que volver a
asignar memoria y volver a copiarlo entero.

Probé a hacer lo mismo con cStringIO.StringIO
r=cStringIO.StringIO()
pack = struct.pack
while n:
r.write(pack('>I', n & 0xffffffffL)[0])
n = n >> 32

haciendo un test con longs de 500bytes y 10000 iteraciones
su código gana por bastante

StringIO.write
real 0m0.956s
user 0m0.940s
sys 0m0.016s

string
real 0m0.696s
user 0m0.680s
sys 0m0.012s

y este con longs de 5000 bytes
stringIO
real 0m11.296s
user 0m11.289s
sys 0m0.004s

string
real 0m9.753s
user 0m9.721s
sys 0m0.036s


¿Alguién sabe a que se debe esto?
¿cúando se deben usar strings y cuando StringIO?

Gracias.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100401/dae248d2/attachment.html>


Más información sobre la lista de distribución Python-es