Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 对象列表的深度副本实例化新对象?_Python 3.x_Object_Deep Copy - Fatal编程技术网

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
操作符检查对象。但是是什么让你认为
[:]
创建了一个深度拷贝呢?