4

新功能:将(数字)元素从一个列表复制到另一个列表而不绑定两个列表中的元素的最佳方法是什么?例如:

A=[[6,2,-1],[9,-2,3]]
B=A[0]
del B[0]

也将设置A[[2,-1],[9,-2,3]],即使我想A保持不变。

4

3 回答 3

3

问题是通过这样做

B=A[0]

您只需再次引用 A 列表

您可能想要制作列表的副本,例如

B=list(A[0])

如果列表包含需要复制的对象,您需要深度复制整个列表

import copy
B = copy.deepcopy(A[0])

但你不需要这个整数

于 2013-05-23T19:59:59.667 回答
3

您的代码B只是对A. 这是一个问题,因为其中的第一项A是可变对象,即列表。您要做的是将 的元素复制到A[0]一个新列表中,您将调用该列表B

b = a[0][:] # lowercase variable names according to PEP8

请注意,这仍然a[0]. 这将适用于您的情况,因为您已经说过这些元素是数字的,这意味着它们是不可变的。但是,如果您在 中包含更多嵌套列表a[0],或者其他可变对象而不是数字,那么您稍后可能会遇到同样的问题,再往下一层。请注意您需要全新对象的位置以及引用足够的位置。

于 2013-05-23T20:04:29.067 回答
2

初始化B为列表并使用.append()而不是=

A=[[6,2,-1],[9,-2,3]]
B = []
B.append(A[0])

有关更多详细信息,请参阅这篇文章,但它的要点是使用=复制指向内存中列表的指针。而 usingappend确保正在复制的是列表中包含的数据,而不是列表指针本身。

于 2013-05-23T19:59:28.317 回答