我在一次Python考试中遇到了这个问题。试图返回一个类似于以下列表的深度副本:
l = list()
l = [0,1,2]
l1 = l
l[0] = 1
应该包含[0,1,2]
而不是[1,1,2]
这个练习要求使用元类来实现。
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中,
'='
是一个语句而不是运算符,并且它无法被覆盖。有没有什么办法在赋值时返回深拷贝?我已经尝试了很多次,但都没有成功。
l1 = l[:]
)仅用三个字符执行深拷贝。在这里使用元类似乎有些过度设计。 - Frédéric Hamidifrom copy import deepcopy
和b=deepcpy(a)
,否则只有主列表会被复制,而所有嵌套的容器类都将作为引用保留在新列表中!您可以通过例如以下方式检查它:for l in (a,b): id(l); map (id,l)
- Don Question