Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Copy

8/24
Recursos

Aportes 16

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

📝Copy


.copy() nos permite copiar un array de NumPy en otra variable de tal forma que al modificar el nuevo array los cambios no se vean reflejados en array original.

arr = np.arange(0, 11)
arr ----> array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
arr[0:6] ----> array([0, 1, 2, 3, 4, 5])
trozo_de_arr = arr[0:6]
trozo_de_arr[:] = 0
trozo_de_arr ----> array([0, 0, 0, 0, 0, 0])

Se han modificado los datos del array original porque seguía haciendo referencia a esa variable.

arr ----> array([ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9, 10])
arr_copy = arr.copy()
arr_copy[:] = 100
arr_copy ----> array([100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100])
arr ----> array([ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9, 10])

Es muy importante esta clase.

También es posible copiar el array original y hacer el slicing en la misma linea

a = [1,2,3,4,5,6,7,8,9,10]
b = a.copy()[:6]
* b será igual a = [1,2,3,4,5]

Copy

⚠️ Cuando trabajamos con pedazos de un array padre y empezamos a modificar ese supuesto pedazo, estamos modificanto el array padre

arr_copy = arr.copy()
🚨
Aca si tenemos un array que es una copia del padre y podemos modificarlo sin danar el original
…
⚠️ Siempre que quieras modificar un pedazo del array → COPY
…

  • Cuando es por valor, la información de la variable se almacenan en una dirección de memoria diferente al recibirla en la función, por lo tanto si el valor de esa variable cambia no afecta la variable original, solo se modifica dentro del contexto de la función.

  • Cuando es por referencia, la variable que se recibe como parámetro en la función apunta exactamente a la misma dirección de memoria que la variable original por lo que si dentro de la función se modifica su valor también se modifica la variable original.

<h5>Tal y como se explica en este gif.</h5>
<h5>Enlace de la fuente</h5>

En python está la built-in function id que permite saber el espacio en memoria de una variable. Esto no solo pasa con numpy y pandas, tambien con diccionarios.

Con id podemos ver con un poco más de evidencia este error que varios hemos pasado

Este es un ejemplo con diccionarios pero funciona igual para un numpy array

dict_1 = {"llave_1": 1, }
dict_2 = dict_1
id(dict_2)  #1430585063744
id(dict_1)  #1430585063744

dict_2 = dict_1.copy()
id(dict_2) # 1430585063872

No es exactamente python pero si puede darles una ayudita con el tema de entender que es lo que ocurre cuando estamos haciendo moviendo las cosas de un lado a otro.
Y esta cortito el video dura 7 minutos mírale si
Clase: Como funciona la memoria en JavaScript || Curso Intermedio de Programación Orientada a Objetos en JavaScript

Utilizar la función id, también nos da una excelente pista acerca de nuestros objetos evitándonos esos “graves” accidentes.

"The id() function returns a unique id for the specified object.

All objects in Python has its own unique id.

The id is assigned to the object when it is created.

The id is the object’s memory address, and will be different for each time you run the program. (except for some object that has a constant unique id, like integers from -5 to 256)"

Copy, Paste, sigue siendo util

MUY BUEN CURSO! Me encanta

Excelente recomendación, no tenia ni idea de que eso podia llegar a pasar

A nivel LISTA existe el módulo COPY. Para evitar que no pase con listas lo que comentó el profesor Carlos para los array de NUMPY.

import copy  
copia_sin_referencia_lista = copy.copy(lista_original)

Lo explica el profesor David Aroesti en esta clase:
https://platzi.com/clases/1378-python-practico/14164-uso-de-listas/

Buen punto aprender de las fallas y enseñar sobre ellas, gracias

Básicamente, estamos hablando de una herramienta para evitar la perdida de data. Interesante. Muchas gracias .copy()

Hola, nada muy creativo por aca, pero dejo mi aporte:

arr2 = np.linspace(1,100,10, dtype=‘int8’)
arr2

arr2[arr2 <= 56]

Cuando recién comencé a aprender Python tuve muchos inconvenientes con reasignar vectores o arrays, debido a que había aprendido a programar en otro lenguaje.

¡Muy importante esta clase!

¡Excelente clase!