Cannot make Python list copies to work
本问题已经有最佳答案,请猛点这里访问。
当我试图处理一个列表和它的副本时,我有一个问题。我知道在python中有一些复制列表的方法,我认为我遵循它们。这是我的问题。
1 2 3 4 5 6 7 8 9 10 11 | a = [] for i in range(10): a.append([0]*10) b = a[:] for j in a: j[0] = 1 print a print b |
我创建一个空白列表。然后我添加10个子列表的零([0,0,0,0,0….])。然后复制列表,最后迭代第一个列表。但当我打印它们时,两个列表都被更改了。
您只创建了一个浅副本。这将创建一个引用所包含值的新列表。
您可以添加复制级别:
1 | b = [elem[:] for elem in a] |
这将创建一个新的列表对象,其中包含来自
或者,您可以使用
3种选择:
- 将内置的list()函数与生成器结合使用
- 列表理解
- 通用拷贝.deepcopy()。
b = copy.deepcopy(a)
创建深度拷贝的另一种方法是使用
要正确复制,请使用
1 | b = copy.deepcopy(a) |