variable valor vacia una tipos sentencias lista guardar funciones defino cómo crear capturar borrar python

valor - sentencias en python



Python: los cambios en mi variable de copia afectan la variable original (4)

Cuando escribes

org_list = [''y'', ''c'', ''gdp'', ''cap'']

usted crea el objeto de la lista y le da el nombre "org_list".

Entonces cuando lo haces

copy_list = org_list

simplemente quiere decir que "el nombre copy_list se refiere al mismo objeto que org_list".

Si su lista solo contiene tipos inmutables, puede crear una copia

copy_list = list(org_list)

Pero tenga en cuenta que esto solo es válido si los objetos de la lista son inmutables, porque crea una copia POCO, es decir, la lista se copia, pero cada elemento de la lista no está duplicado.

Si tiene, por ej., Una lista de listas y desea que TODO se duplique, debe realizar una copia DEEP:

import copy org_list = [''y'', ''c'', [''gdp'', ''rtd''], ''cap''] copy_list = copy.deepcopy(org_list)

Estoy a tu nivel en el aprendizaje de Python, y estoy (algo así como) escribiendo un blog para arreglar conceptos. Escribirlos me ayuda a entender mejor. Esto es lo que escribí sobre copias superficiales y copias profundas: http://bioruffo.net/lpotf/bindings-shallow-copy-deep-copy/115/

Esta pregunta ya tiene una respuesta aquí:

Tengo una lista para la que creo una copia para hacer algunas manipulaciones sin perder la lista original. Sin embargo, cuando configuro copy_list igual a org_list , se convierten en lo mismo, y si cambio copy_list , org_list también cambia. Por ejemplo:

org_list = [''y'', ''c'', ''gdp'', ''cap''] copy_list = org_list copy_list.append(''hum'') print(copy_list) print(org_list)

devoluciones

[''y'', ''c'', ''gdp'', ''cap'', ''hum''] [''y'', ''c'', ''gdp'', ''cap'', ''hum'']

No sé demasiado sobre lo que realmente está sucediendo, pero parece que org_list realidad se está pasando a copy_list para que en realidad sean lo mismo.

¿Hay alguna manera de hacer una copia independiente de org_list sin hacer algo torpe como:

copy_list = [] for i in org_list: copy_list.append(i)

Digo esto porque tengo el mismo problema con otros tipos de variables, por ejemplo, un marco de datos de pandas.


Eso es porque en la configuración de Python, una variable realmente establece una referencia a la variable. Casi todas las personas que aprenden python se encuentran con esto en algún momento. La solución es simplemente copiar la lista:

copy_list = org_list[:]


Esto es solo copiar la referencia

copy_list = org_list

Deberías usar

copy_list = org_list[:] # make a slice that is the whole list

o

copy_list = list(org_list)


Los nombres de las variables en python son referencias al original. Para hacer una copia, debes ser explicit :

import copy copy_list = copy.copy(org_list)