Bu alıştırmayı bir python sınavında aldım. Böyle bir listenin derin o kopyasını döndürmek için çalışılıyor:Ödevdeki listenin Python derin kopyası
l = list()
l = [0,1,2]
l1 = l
l[0] = 1
l1 [0,1,2]
içermelidir değil [1,1,2]
bir metaclass kullanarak uygulamak belirtilen egzersiz. Bildiğim kadarıyla
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
, Python '='
bir açıklama değil, bir operatör ve bu overriden olamaz. Ödev üzerinde derin bir kopyanın nasıl iade edileceğine dair bir fikrin var mı? Çok fazla deniyor ama başarıya ulaşmıyor.
, yapamazsın. Ve usta bir hacker bile bir yol bulursa, ** asla ** kullanılmamalıdır. Ve ben böyle kolayca battaniye ifadeleri yapmıyorum, inan bana. – delnan
Bu oldukça garip bir alıştırmadır, çünkü sadece üç karakterle dilim notasyonu ('l1 = l [:]') kullanarak derin bir kopya yapabilirsiniz. Metakımların kullanılması burada aşırı bir his veriyor. –
Bu, okul için bir sınav soruysa, bunu kapatmanızı öneriyorum. Sınava yardımcı olmak için bize sormamız akademik aldatmanın yüksekliğidir. –