Saltar a contenido

Copia de objetos

De la misma forma que las colecciones, los objetos se pasan a las funciones por referencia. Si modificamos sus valores dentro, éstos se verán reflejados fuera.

Esto también afecta a la hora de hacer copias, creándose en su lugar un acceso al objeto en lugar de uno nuevo con sus valores:

class Test:
    pass

test1 = Test()
test2 = test1

test1.algo = "Prueba"

print(test2 == test1)  # ¿Son el mismo objeto?

try:
    print(test2.algo)
except Exception as e:
    print(e)
True
Prueba

Para realizar una copia a partir de sus valores podemos utilizar la función copy del módulo con el mismo nombre:

from copy import copy

class Test:
    pass

test1 = Test()
test2 = copy(test1)

test1.algo = "Prueba"

print(test2 == test1)  # ¿Son el mismo objeto?

try:
    print(test2.algo)
except Exception as e:
    print(e)
False
'Test' object has no attribute 'algo'

La función copy se puede utilizar también para copiar colecciones:

from copy import copy

lista1 = [1,2,3]
lista2 = copy(lista1)
lista1 = None

print(lista1)
print(lista2)
None
[1, 2, 3]

Última edición: 29 de Septiembre de 2018