小编典典

创建不引用所包含对象的列表副本

python

假设我有一个向量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以一种甚至所有内部对象都不会被引用的方式创建对象的副本?


阅读 237

收藏
2021-01-20

共1个答案

小编典典

为此用途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'
2021-01-20