python: los cambios en mi variable de copia afectan a la variable original

Tengo una lista de la que creo una copia para poder realizar algunas manipulaciones mientras mantengo la lista original. Sin embargo, cuando configuro copy_list igual a org_list , se convierten en la misma cosa, 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é mucho 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 una 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 dataframe de pandas.

Esto se debe a que, en la configuración de python, una variable 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 sólo 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) 

Cuando escribes

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

usted crea el objeto de lista y le asigna el nombre “org_list”.

Entonces cuando lo hagas

 copy_list = org_list 

solo quiere decir “el nombre copy_list se refiere al mismo objeto que org_list”.

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

 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 SHALLOW, es decir, la lista se copia, pero no todos los elementos de la lista están duplicados.

Si tiene, por ejemplo, una lista de listas y desea duplicar TODO, debe realizar una copia PROFUNDA:

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

Los nombres de variables en python son referencias al original. Para hacer una copia, necesitas ser explícito :

 import copy copy_list = copy.copy(org_list)