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

Mat*_*NNZ 0 python object

假设我有一个向量a定义为:

a = [[1,2,3],[-1,-2,-3]]
Run Code Online (Sandbox Code Playgroud)

我已经了解到要创建对象的副本a而不引用它,我应该使用以下语法:

b = a[:]
Run Code Online (Sandbox Code Playgroud)

实际上,如果我执行以下语句:

b = []
print a
Run Code Online (Sandbox Code Playgroud)

输出是

>>> [[1,2,3],[-1,-2,-3]]
Run Code Online (Sandbox Code Playgroud)

正如我所期待的那样.但是,如果我执行以下操作:

b = a[:]
b[0][2] = 'change a'
print a
Run Code Online (Sandbox Code Playgroud)

输出是

>>> [[1,2,'change a'],[-1,-2,-3]]
Run Code Online (Sandbox Code Playgroud)

所以我很清楚,a[0]即使包含在内,该对象也被引用a.如何a以一种甚至不会引用其所有内部对象的方式创建对象的副本?

Mar*_*ers 5

a[:]创建列表的浅表副本.

您可以使用该copy.deepcopy()函数递归复制对象,或使用列表推导:

b = [el[:] for el in a]
Run Code Online (Sandbox Code Playgroud)

这将创建一个新的列表对象,其中包含嵌套列表对象的浅副本a.