Tengo este ejercicio en un examen de Python. Tratar de devolver una copia profunda o de una lista como esta:Python, copia en profundidad de la lista en la asignación
l = list()
l = [0,1,2]
l1 = l
l[0] = 1
L1 debe contener [0,1,2]
no [1,1,2]
El ejercicio especificada para ponerlo en práctica mediante el uso de una metaclase.
class deep(type):
def __new__(meta, classname, bases, classDict):
return type.__new__(meta, classname, bases, classDict)
def __init__(cls, name, bases, dct):
super(deep, cls).__init__(name, bases, dct)
def __call__(cls, *args, **kwds):
return type.__call__(cls, *args, **kwds)
class list(metaclass=deep):
def __init__(self):
pass
Por lo que sé, el '='
en Python es una declaración y no un operador y no se puede anular. ¿Alguna idea sobre cómo devolver una copia profunda en una tarea? He estado intentando bastante pero sin éxito.
En resumen, no se puede. E incluso si algún hacker ingenioso encuentra la manera, nunca ** debe ** ser usado. Y no estoy haciendo afirmaciones generales así, créanme. – delnan
Este es un ejercicio bastante extraño, dado que puede realizar una copia profunda con solo tres caracteres utilizando la notación de división ('l1 = l [:]'). Usar metaclases se siente excesivo aquí. –
Si esta es una pregunta de examen para la escuela, le sugiero que simplemente la cierre. Pidiéndonos ayuda con su examen es el colmo de la trampa académica. –