[pyar] ¿Volvemos a empezar?

Fernando Pelliccioni fpelliccioni en gmail.com
Mie Abr 30 19:23:40 ART 2014


2014-04-30 19:16 GMT-03:00 Pablo Gabriel Celayes <pablocelayes en gmail.com>:

> El slice crea una lista nueva. De hecho, un atajo común para crear una
> copia es hacer un slice sin parámetros:
>

Perdón, pero, no se por qué hay algo que me hace dudar ...
Seguro que crea una lista nueva?  (no se adelanten, ver abajo)...
Hay una tecnica que se llama Copy-On-Write (COW) ...  (seguir leyendo)


>
> In [1]: a = range(10)
>
> In [2]: b = a[:]
>

Hasta este punto, es probable que b no sea una lista nueva (copiada de a),
ya que a = b.


>
> In [3]: b[0] = 20
>


Como aca estoy modificando b, recien aca hago la copia ( Copy on Write )
Ahora si son listas distintas, dos pedazos de memoria diferentes.
Es una optimizacion usada en algunos lenguajes, pero desaconsejada en
ciertos escenarios.
Me pregunto si Python tambien la estará utilizando en casos como este.


> 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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140430/b45a8a57/attachment.html>


More information about the pyar mailing list