[pyar] ¿Volvemos a empezar?

Fernando Pelliccioni fpelliccioni en gmail.com
Mie Abr 30 19:28:20 ART 2014


2014-04-30 19:20 GMT-03:00 Cesar Ballardini <cesar en ballardini.com.ar>:

> Me parece que Fernando preguntaba si se copiaban los elementos, no la
> lista.
>
>
Veo dos opciones.

- Se crea una nueva lista, conteniendo punteros o referencias a la lista
anterior  (shallow-copy)
- Se crea una nueva lista, conteniendo copias de los elementos (deep-copy)

Según la respuesta de Pablo, creo que es DeepCopy, pero me hace dudar el
CopyOnWrite...
Soy muy desconfiado con estas cosas y me gusta probarlas por mi cuenta o
leerlo bien en la especificación (cosa que no hice porque me dio vagancia
leer toda la pagina, opté por el atajo de consultarles a ustedes)




>
> El 30 de abril de 2014, 19:16, Pablo Gabriel Celayes <
> pablocelayes en gmail.com> escribió:
>
> El slice crea una lista nueva. De hecho, un atajo común para crear una
>> copia es hacer un slice sin parámetros:
>>
>> In [1]: a = range(10)
>>
>> In [2]: b = a[:]
>>
>> In [3]: b[0] = 20
>>
>> In [4]: b
>> Out[4]: [20, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>
>> In [5]: a
>> Out[5]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>
>>
>>
>> 2014-04-30 19:02 GMT-03:00 Fernando Pelliccioni <fpelliccioni en gmail.com>:
>>
>>>
>>>
>>>
>>> 2014-04-30 18:14 GMT-03:00 Marcelo Fernandez <
>>> marcelo.fidel.fernandez en gmail.com>:
>>>
>>> El 30 de abril de 2014, 17:39, Fernando Pelliccioni
>>>> <fpelliccioni en gmail.com> escribió:
>>>> >
>>>> >
>>>> >
>>>> > 2014-04-30 17:03 GMT-03:00 fisa <fisadev en gmail.com>:
>>>> >
>>>> >> El día 30 de abril de 2014, 17:02, fisa <fisadev en gmail.com>
>>>> escribió:
>>>> >> > El día 30 de abril de 2014, 16:59, Emiliano Dalla Verde Marcozzi
>>>> >> > <edvm en fedoraproject.org> escribió:
>>>> >> >> El 30 de abril de 2014, 16:48, Fernando Pelliccioni
>>>> >> >> <fpelliccioni en gmail.com>
>>>> >> >> escribió:
>>>> >> >>>
>>>> >> >>> Tiro una que puede parecer una boludés...
>>>> >> >>>    - Determinar si una secuencia de elementos es un palíndromo.
>>>> >> >>> Parece un ejercicio de introducción a la programación, ... ,
>>>> pero...
>>>> >> >>> si
>>>> >> >>> les va, la hacemos (sin medir tiempos, no hace falta) y después
>>>> vemos
>>>> >> >>> la
>>>> >> >>> utilidad.
>>>> >> >>
>>>> >> >>
>>>> >> >> Mi implementación de palindromo a la python por acá! :)
>>>> >> >>>>> cadena = 'asdsa'
>>>> >> >>>>> [c for c in cadena][::-1] == [c for c in cadena]
>>>> >> >> True
>>>> >> >>
>>>> >> >
>>>> >> > +1 a lo que dijo facu, pero no puedo dejar pasar este detalle: no
>>>> hace
>>>> >> > falta una list comprehension para eso! y lo va a hacer más lento al
>>>> >> > pedo :)
>>>> >> > Basta con:
>>>> >> >     cadena::-1 == cadena
>>>> >> >
>>>> >>
>>>> >> Typo! era:
>>>> >>      cadena[::-1] == cadena
>>>> >>
>>>> >>
>>>> >
>>>> > Que significa el [::-1] ?
>>>>
>>>> El tercer valor de un slice es el step, y -1 quiere decir que se lo
>>>> recorra al revés, digamos.
>>>>
>>>> "The slice of s from i to j with step k is defined as the sequence of
>>>> items with index x = i + n*k such that 0 <= n < (j-i)/k. In other
>>>> words, the indices are i, i+k, i+2*k, i+3*k and so on, stopping when j
>>>> is reached (but never including j). If i or j is greater than len(s),
>>>> use len(s). If i or j are omitted or None, they become “end” values
>>>> (which end depends on the sign of k). Note, k cannot be zero. If k is
>>>> None, it is treated like 1."
>>>>
>>>>
>>>> https://docs.python.org/3/library/stdtypes.html#common-sequence-operations
>>>>
>>>> >>> foo = '0123456789'
>>>> >>> foo[::-1]
>>>> '9876543210'
>>>>
>>>> Saludos
>>>>
>>>
>>> Gracias muchachos por la explicación de slice.
>>>
>>> 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.
>>>
>>> ¿Existe en Python alguna forma de verificar si algun elemento esta
>>> siendo copiado?
>>> Lo pregunto, para poder verificar mi duda.
>>>
>>> Les escribo un ejemplo en C++ (ya que hay gente que sabe) para ilustrar
>>> lo que estoy preguntado.
>>> En C++ podría crear una clase, llamemosla Instrumentation, para
>>> verificar el comportamiento de los algoritmos...
>>>
>>> // Pseudo-C++, no es del todo correcto, solo quiero expresar la idea.
>>> class Instrumentation {
>>> Instrumentation( Instrumentation const& x ) // este es el
>>> Copy-Constructor, se ejecuta cada vez que quiero copiar un objeto...
>>>  {
>>> cout << "Se esta copiando un objeto del tipo Instrumentation\n"; //
>>> escribe en standard output
>>>  }
>>> };
>>>
>>> // entonces, suponganmos que tengo una sequencia de elementos
>>> vector<Instrumentation> v = { /* llenar con elementos */ }; // vector
>>> es un array redimensionable, elementos contiguos en memoria.
>>>
>>> // supongamos algo analogo al Slice de Python, la funcion slice(s, i, j,
>>> k) (no se todavia que deberia retornar)
>>> auto s = slice(v, ?, ?, -1);
>>>
>>> Si la funcion slice hace una copia de los elementos de mi secuencia...
>>> deberia ver en la salida estandar el string que puse en el Copy-Ctor.
>>> Si la funcion slice me retorna un Iterador (una forma de recorrer la
>>> secuencia), entonces, no hay copia.
>>>
>>> No se si me expliqué bien o estoy mareando al pedo (a veces me pasa).
>>>
>>> Saludos.
>>> Fernando.
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>>
>>
>>
>>
>> --
>>  *ıl**l**ıl**l**ı* ρąβℓ๏ *ıllı**lı*
>> We are the problem. And we should provide the *solution*.
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
>
> --
> It's not enough to teach students to surf the Net, we must teach them to
> make waves. My pedagogical theory is relate, create, donate, which
> suggests that students work in teams, create ambitious projects and then
> donate these to people who can use and build upon them. --Ben Shneiderman
>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140430/1c504fa4/attachment.html>


More information about the pyar mailing list