对象列表的深层副本实例化新对象?

时间:2018-01-09 17:06:42

标签: python-3.x object deep-copy

首先,我为某些目的编写了一个我需要的课程。我有这个类的几个对象我把它们放在一个列表中。它可能是这样的:

obj0=created_class(0)
obj1=created_class(1)
List_of_obj=[obj0,obj1]

现在我需要列表的深层副本:

Deep_copy=List_of_obj[:]

我的问题是:这会从创建的类中实例化新对象吗?

1 个答案:

答案 0 :(得分:0)

切片([:]创建列表的深层副本。

>>> 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)>]

注意对象的位置&#39; ID是相同和不同的。

如果您的课程在复制时需要特别小心,您可以从documentation of the copy module in the standard lib找到更多信息。