Uso del intern (RE: Asignaciones e identidades)

Chema Cortes chemacortes en wanadoo.es
Mar Ago 20 09:43:30 CEST 2002


Attila escribió:
> solo se puede hacer "interning" sobre los tipos de datos
> inmutables.  y dentro de ellos algunos se hace automaticamente
> y sobre otros no.  por ejemplo, los strings se hacen interning
> solo si se "parecen" a un nombre de valido en python.
> 
> >>> a = "variable"
> >>> b = "variable"
> >>> a is b
> 1
> >>> a = "no es variable"
> >>> b = "no es variable"
> >>> a is b
> 0
> >>>
> 
> el programador puede forzar el interning de strings mediante el
> builting intern()

Entiendo que todo se trate de una "optimización" del intérprete, aunque no llego a ver claras cuáles son las ventajas.

Pero me da pie para otra pregunta que también me estaba rondando. He estado leyendo el libro "Web Programming in Python: Techniques for integrating Linux, Apache, and MySQL" de G.K.Thinruvathukal/T.W.Christopher/J.P.Shaface (donde se trata el framework "Slither" http://www.slither.info). En el capítulo de python avanzado comentan que para comparar dos cadenas es más rápido combinar 'intern()' e 'is' que el operador de comparación '==' entre cadenas. Esto es, en lugar de:

# En lugar de
"mi variable" == "mi var" + "riable"

# más rápido
intern("mi variable") is intern("mi va" + "riable")

Desde luego sólo notaríamos la velocidad si tuviéramos que comparar numerosas cadenas.

Entiendo, pues, que la rapidez no es otra cosa que aprovecharse de que el intérprete ya había hecho la "comparación" implícitamente cuando creó y dio la misma representación interna a las cadenas que queremos comparar. Pero sigo sin comprender porqué en el ejemplo:

>>> a = "mi variable"
>>> b = "mi variable"
>>> a is b
0
>>> intern(a) is intern(b)
1

Si ambas cadenas comparten la misma representación interna, ¿por qué no son el mismo objeto?

Supongo que para comprender mejor este asunto tendría que meterme a fondo con las estructuras de datos en el código fuente de python.

Saludos,
-- 
Chema Cortes (chemacortes en wanadoo.es)
_____________________________________________________________________
Horas ilimitadas para leer y enviar correos con Tarifa Plana Wanadoo 
¡¡ desde las 3 de la tarde!!
Compruébalo en http://www.wanadoo.es/acceso-internet





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