假设我有一个向量a
定义为:
a = [[1,2,3],[-1,-2,-3]]
我了解到,要创建对象a
的副本而不引用它,我应该使用以下语法:
b = a[:]
实际上,如果我执行以下语句:
b = []
print a
输出为
>>> [[1,2,3],[-1,-2,-3]]
完全如我所料。不过,如果我做以下事情:
b = a[:]
b[0][2] = 'change a'
print a
输出为
>>> [[1,2,'change a'],[-1,-2,-3]]
所以我很清楚,对象a[0]
正在被引用,即使它包含在a
中。如何创建对象a
的副本,使其所有内部对象都不会被引用?你知道吗
如果只“浅拷贝”
b = a[:]
,则每个子列表b[n]
仍然是对a[n]
处引用的相同子列表的引用。相反,你需要做一个深度(er)拷贝,例如这将创建每个子列表的浅表副本,但由于它们的内容是不可变的,所以这不是问题。如果您有更多级别的容器嵌套,那么您需要
copy.deepcopy
,正如其他答案所建议的那样。你知道吗对于这种用法
deepcopy
:深度复制:https://docs.python.org/2/library/copy.html#copy.deepcopy
延伸
Deepcopy还创建类实例的单个副本。请参阅下面的简单示例。你知道吗
a[:]
创建列表的浅副本。你知道吗可以使用^{} function 递归地复制对象,也可以使用列表:
这将使用
a
中嵌套列表对象的浅拷贝创建一个新的列表对象。你知道吗相关问题 更多 >
编程相关推荐