algo de información sobre ese ejemplo concreto: Si lo que desea es una iteración, mapa o filtrar el resultado, puede utilizar un generador para evitar una copia matriz:
import itertools
files = itertools.islice(files, batch_size)
Como para el caso general : Si asigna el nuevo valor a un nombre ya existente o a un nuevo nombre, no debería haber absolutamente ninguna diferencia (al menos desde el punto de vista del intérprete/VM). Ambos métodos producen casi exactamente el mismo código de bytes:
Python 2.7.2 (default, Nov 21 2011, 17:25:27)
[GCC 4.6.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import dis
>>> def func1(files):
... files = files[:100]
...
>>> def func2(files):
... new_files = files[:100]
...
>>> dis.dis(func1)
2 0 LOAD_FAST 0 (files)
3 LOAD_CONST 1 (100)
6 SLICE+2
7 STORE_FAST 0 (files)
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
>>> dis.dis(func2)
2 0 LOAD_FAST 0 (files)
3 LOAD_CONST 1 (100)
6 SLICE+2
7 STORE_FAST 1 (new_files)
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
El mismo se puede observar en Python 3.
De hecho, func1
incluso podría ser un poco más rápido, porque el nombre files
se ha visto antes y podría ya estar en algún caché de búsqueda variable.
No veo cuál es la pregunta aquí. ¿Cuál es la alternativa para comparar? Usando una segunda variable como 'files = XYZ; files_head = archivos [: batch_size] '? ¿Por qué debería haber alguna diferencia? –
alternativa siendo algo así como: new_set_of_files = files [: batch_size] – jldupont
Notarías la principal de inmediato: * ¡Oye! ¡Aún necesito ese viejo valor para 'archivos'! *. – Droogans