[pyar] ¿Volvemos a empezar?

Roberto Alsina ralsina en netmanagers.com.ar
Mie Abr 30 19:52:24 ART 2014


On 30/04/14 19:47, Fernando Pelliccioni wrote:
>
>
>
> 2014-04-30 19:45 GMT-03:00 Roberto Alsina <ralsina en netmanagers.com.ar 
> <mailto:ralsina en netmanagers.com.ar>>:
>
>     On 30/04/14 19:42, Fernando Pelliccioni wrote:
>>
>>
>>
>>     2014-04-30 19:31 GMT-03:00 Facundo Batista
>>     <facundobatista en gmail.com <mailto:facundobatista en gmail.com>>:
>>
>>         2014-04-30 19:02 GMT-03:00 Fernando Pelliccioni
>>         <fpelliccioni en gmail.com <mailto:fpelliccioni en gmail.com>>:
>>
>>         > Leyendo la documentación, no me queda claro si el slice
>>         implica "recrear" el
>>         > fragmento de la secuencia en otro pedazo de memoria o solo
>>         es una forma de
>>         > iterar la secuencia original.
>>
>>         El slice es una notación sintáctica, lo que está haciendo
>>         realmente es
>>         decirle al objeto que devuelva determinadas cosas. Es
>>         responsabilidad
>>         del objeto decidir qué devuelve.
>>
>>         Todos los tipos de datos builtin de Python devuelven (cuando son
>>         "suscribibles"), otro objeto de ese mismo tipo [0], con las
>>         referencias a los objetos originales.
>>
>>         Vemos como una tupla te devuelve una tupla, y una lista te
>>         devuelve
>>         una lista, por ejemplo:
>>
>>         >>> (1, 2, 3)[:1]
>>         (1,)
>>         >>> a = [1, 2, "foo", [6, 7]]
>>         >>> b
>>         ['foo', [6, 7]]
>>
>>         Y vemos que los objetos *dentro* de esos objetos son los mismos:
>>
>>         >>> b[1] is a[3]
>>         True
>>
>>         Un ejemplo de algo no subscribible:
>>
>>         >>> 3[:]
>>         Traceback (most recent call last):
>>           File "<stdin>", line 1, in <module>
>>         TypeError: 'int' object is not subscriptable
>>
>>
>>
>>         > ¿Existe en Python alguna forma de verificar si algun
>>         elemento esta siendo
>>         > copiado?
>>         > Lo pregunto, para poder verificar mi duda.
>>
>>         Poder ves si dos objetos son el mismo, comparando identidad,
>>         como hice arriba.
>>
>>         Slds.
>>
>>
>>         [0] Hay excepciones. Puntualmente me sorprendió esto:
>>
>>         >>> a = "supercalifragilísticoespialidoso"
>>         >>> b = a[:]
>>         >>> a is b
>>         True
>>
>>
>>     Interesante... entonces, no es garantizado que haga copia, ni
>>     siquiera shallow.
>>     Agrego
>>
>>     >>> a[0] = 'S'
>>     TypeError: 'str' object does not support item assignment
>>
>>
>>     Seguro me estoy equivocando en algo. Como hago para reemplazar un
>>     caracter del string por otro? (ya conozco el indice)
>>
>
>
>     Los strings son inmutables. Tenés que crear un string nuevo.
>
>
>
> >>> a = "supercalifragilísticoespialidoso"
> >>> b = a[:]
> >>> b[0] = 'S'
> TypeError: 'str' object does not support item assignment
>

Porque b también es un string, y por eso es inmutable, y tenés el mismo 
problema :-)

Eso no es lo que te digo. Lo que te digo es que construyas, que crees, 
un string nuevo con el elemento que vos querés en el lugar que vos lo 
querés.

Un ejemplo obvio de como crear un string nuevo:

 >>> a = 'casa'
 >>> b=a[3]+a[2]+a[1]+a[0]
 >>> b
'asac'

Uno menos obvio:

 >>> b='casa'[::-1]
 >>> b
'asac'

Otro tal vez más claro:

 >>> b=''.join(('a','s','a','c'))
 >>> b
'asac'


------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140430/b63f6196/attachment-0001.html>


More information about the pyar mailing list