Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/06/2011, 10:46
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Duda simple de asignación

Código Python:
Ver original
  1. import random
  2.  
  3. lista_aleatoria = []
  4. longitud = 100
  5.  
  6. def quicksort(datos, primero, ultimo):
  7.     datos = datos[:]
  8.     i = primero
  9.     j = ultimo
  10.     pivote = (datos[primero] + datos[ultimo]) / 2
  11.     while i < j:
  12.         while datos[i] < pivote: i+=1
  13.         while datos[j] > pivote: j-=1
  14.         if i <= j:
  15.             aux = datos[i]
  16.             datos[i] = datos[j]
  17.             datos[j] = aux
  18.             i+=1
  19.             j-=1
  20.  
  21.     if primero < j: datos = quicksort(datos, primero, j)
  22.     if ultimo > i: datos = quicksort(datos, i, ultimo)
  23.     return datos
  24.  
  25.  
  26. for i in range(longitud-1):
  27.     j = longitud - i
  28.     lista_aleatoria.append(random.randint(1, 100))
  29.      
  30. lista_ordenada = quicksort(lista_aleatoria,0,len(lista_aleatoria)-1)
  31. print lista_aleatoria
  32. print lista_ordenada

Lo que pasa es que estas haciendo operaciones *IN-PLACE*
Ejemplo:
Código Python:
Ver original
  1. lista = [1, 2, 3]
  2. def f(dato):
  3.     dato[2] = 4 #Esto es una operacion *IN-PLACE*
  4.     return dato
  5. lista2 = f(lista) #Ahora lista y lista2 son: [1, 2, 4]
  6. #Y de hecho son la misma lista

#En cambio
Código Python:
Ver original
  1. numero = 5
  2. def f(dato):
  3.     dato += 1 #Esto no es una operacion *IN-PLACE*
  4.     return dato
  5. numero2 = f(numero)
  6. print numero #numero es 5
  7. print numero2 #numero es 6

Una regla simple para saber si puedo o no hacer operaciones IN-PLACE es saber si el tipo de dato es mutable o no.
En el caso de los enteros no es mutable, pero en caso de las listas y diccionarios si lo son. Así que la mayoría de las operaciones que hagas con tipos de datos mutables son IN-PLACE.

Cuando son tipos de datos mutables cualquier operación que hagas con ellos regresan una copia. Si son mutables la mayoría de las operaciones *IN-PLACE* por ejemplo.
Código Python:
Ver original
  1. lista = [1, 2, 0, 2, -1, 7]
  2. lista.sort() #Esto no devuelve una lista ordenada, si no que lo hace *IN-PLACE*
  3. print lista