假设我有一个向量a定义为:
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以一种甚至所有内部对象都不会被引用的方式创建对象的副本?
a[0]
为此用途deepcopy:
deepcopy
>>> from copy import deepcopy >>> b = deepcopy(a) >>> b[0][2] = 'change a' >>> print a [[1,2,3],[-1,-2,-3]]
深度复制:https ://docs.python.org/2/library/copy.html#copy.deepcopy
Deepcopy还创建类实例的单个副本。请参见下面的简单示例。
from copy import deepcopy class A: def __init__(self): self.val = 'A' >>> a = A() >>> b = deepcopy(a) >>> b.val = 'B' >>> print a.val 'A' >>> print b.val 'B'