Python 3.x 对象列表的深度副本实例化新对象?
首先,我写了一个出于某些目的需要的类。我有几个这个类的对象,我把它们放在一个列表中。可能是这样的:Python 3.x 对象列表的深度副本实例化新对象?,python-3.x,object,deep-copy,Python 3.x,Object,Deep Copy,首先,我写了一个出于某些目的需要的类。我有几个这个类的对象,我把它们放在一个列表中。可能是这样的: obj0=created_class(0) obj1=created_class(1) List_of_obj=[obj0,obj1] 现在我需要一份清单的详细副本: Deep_copy=List_of_obj[:] 我的问题是:这将从创建的类实例化新对象?切片([:])不会创建列表的深度副本 >>> class K: ... def __init__(self, v
obj0=created_class(0)
obj1=created_class(1)
List_of_obj=[obj0,obj1]
现在我需要一份清单的详细副本:
Deep_copy=List_of_obj[:]
我的问题是:这将从创建的类实例化新对象?切片([:]
)不会创建列表的深度副本
>>> class K:
... def __init__(self, v):
... self.v = v
... def __repr__(self):
... return f'<K: {self.v} ({id(self)})>'
...
>>> l = [K(1), K(2)]
>>> l
[<K: 1 (4556562104)>, <K: 2 (4556562328)>]
>>> l[:]
[<K: 1 (4556562104)>, <K: 2 (4556562328)>]
>>> from copy import deepcopy
>>> deepcopy(l)
[<K: 1 (4556561880)>, <K: 2 (4556560480)>]
>>K类:
... 定义初始值(self,v):
... 自我评价,自我评价
... 定义报告(自我):
... 返回f“”
...
>>>l=[K(1),K(2)]
>>>l
[, ]
>>>l[:]
[, ]
>>>从复制导入deepcopy
>>>深度复制(l)
[, ]
请注意对象的ID相同和不同的位置
如果您的类在复制时需要特别注意,您可以从中找到更多信息。这将是很容易找到的:使用
is
操作符检查对象。但是是什么让你认为[:]
创建了一个深度拷贝呢?