Re: [Python-es] Duda con operador de identidad
Si alguien quiere más información, hace mucho discutimos ésto mismo: http://mail.python.org/pipermail/python-es/2002-August/001071.html http://mail.python.org/pipermail/python-es/2002-August/001080.html http://mail.python.org/pipermail/python-es/2002-August/001096.html Magistral la explicación de Ernesto Revilla: http://mail.python.org/pipermail/python-es/2002-August/001074.html ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
[Python-es] Duda con operador de identidad
Porqué pasa esto? a = 'UnaPalabra' b = 'UnaPalabra' a is b True a = 'Dos Palabras' b = 'Dos Palabras' a is b False Se que para comparar cadenas hay que usar el operador de comparación (==). Pero no entiendo porque usando el operador de identidad, en el primer ejemplo considere que a y b 'apunten' al mismo objeto, y en el segundo ejemplo no. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Duda con operador de identidad
2010/7/17 Sergio Martín sergiomart...@gmail.com: Porqué pasa esto? a = 'UnaPalabra' b = 'UnaPalabra' a is b True a = 'Dos Palabras' b = 'Dos Palabras' a is b False Python hace caché de ciertos objetos (al menos Python 2.x, sucede así con los enteros cortos). No recuerdo si sucede lo mismo con ciertas cadenas, pero dado que son objetos inmutables, no me extrañaría. Saludos, Ricardo ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Duda con operador de identidad
a = 'ñ' b = 'ñ' a is b False Sigo haciendo pruebas, y cuando meto algún carácter que no sea una letra ASCII o un número me da False (espacios, eñes o tildes). El 17/07/2010, a las 17:25, Ricardo Cárdenes Medina escribió: Python hace caché de ciertos objetos (al menos Python 2.x, sucede así con los enteros cortos). No recuerdo si sucede lo mismo con ciertas cadenas, pero dado que son objetos inmutables, no me extrañaría. Saludos, Ricardo ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Duda con operador de identidad
Porqué pasa esto? a = 'UnaPalabra' b = 'UnaPalabra' a is b True a = 'Dos Palabras' b = 'Dos Palabras' a is b False Python hace caché de ciertos objetos (al menos Python 2.x, sucede así con los enteros cortos). No recuerdo si sucede lo mismo con ciertas cadenas, pero dado que son objetos inmutables, no me extrañaría. Lo hace con las cadenas que pueden ser identificadores válidos. En el segundo caso da Falso por el blanco. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Duda con operador de identidad
On Sat, 17 Jul 2010 16:55:39 +0200 Sergio Martín wrote: Porqué pasa esto? a = 'UnaPalabra' b = 'UnaPalabra' a is b True a = 'Dos Palabras' b = 'Dos Palabras' a is b False Un pequeño exordio: como sabemos las cadenas en Python son inmutables, así que por eficiencia las implementaciones suelen mantener una caché para reusarlas (lo que se conoce como string interning). Esto explica que dos cadenas diferentes en realidad apunten (o puedan apuntar) al mismo objeto. Pero tu duda es razonable, ¿por qué a veces sí y a veces no? Sigo haciendo pruebas, y cuando meto algún carácter que no sea una letra ASCII o un número me da False (espacios, eñes o tildes). La razón es que el interning de una cadena no se hace de forma incondicional, cada implementación tiene libertad para definir cuándo hacerlo. En este caso parece que si CPython ve que la cadena no es un nombre de variable válido (por los espacios, acentos, etc) no lo interna, interpretando que en tal caso no vale la pena (aunque en mis pruebas sí lo hace al correr el mismo código en un script normal). Esta es la razón por la que no se puede hacer cadena1 is cadena2, el resultado depende por completo de la política de interning de la implementación (que a su vez suelen tener reglas heurísticas complejas). ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/