[pyar] ¿Volvemos a empezar?
Daniel Moisset
dmoisset en machinalis.com
Mie Abr 30 19:30:24 ART 2014
no es copy-on-write en cpython, hoy (pero otra implementación/versión
podría serlo). Es shallow-copy (eso es implementation independent, es parte
de la semántica del lenguaje)
D.
2014-04-30 15:28 GMT-07:00 Fernando Pelliccioni <fpelliccioni en gmail.com>:
>
>
>
> 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
>>
>
>
> _______________________________________________
> 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/d47603f7/attachment-0001.html>
More information about the pyar
mailing list