假设我有一个向量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以一种甚至不会引用其所有内部对象的方式创建对象的副本?
a[:]创建列表的浅表副本.
您可以使用该copy.deepcopy()函数递归复制对象,或使用列表推导:
b = [el[:] for el in a]
Run Code Online (Sandbox Code Playgroud)
这将创建一个新的列表对象,其中包含嵌套列表对象的浅副本a.