此处的新内容:将(数字)元素从一个列表复制到另一个列表而不绑定两个列表中的元素的最佳方法是什么?例如:
A=[[6,2,-1],[9,-2,3]]
B=A[0]
del B[0]
也会将A
设置为[[2,-1],[9,-2,3]]
,即使我希望A
保持不变。
答案 0 :(得分:3)
问题是通过这样做
B=A[0]
您只需另外引用A列表
您可能希望制作列表的副本,如
B=list(A[0])
如果列表中包含需要复制的对象,则需要深度复制整个列表
import copy
B = copy.deepcopy(A[0])
但你不需要这个整数
答案 1 :(得分:3)
您的代码只是B
对A
中第一项的引用。这是一个问题,因为A
中的第一项是可变对象,即列表。您要做的是将A[0]
的元素复制到新列表中,您将调用B
:
b = a[0][:] # lowercase variable names according to PEP8
请注意,这仍然只会使a[0]
中的shallow copies项成为{{3}}。这将适用于您的情况,因为您已经说过这些元素是数字的,这意味着它们是不可变的。但是,如果a[0]
中包含更多嵌套列表,或者其他可变对象而不是数字,则可能会在以后遇到同样的问题,进一步降低一级。请注意注意您需要整个新对象的位置,以及引用是否足够的地方。
答案 2 :(得分:2)
将B
初始化为列表并使用.append()
代替=
A=[[6,2,-1],[9,-2,3]]
B = []
B.append(A[0])
有关详细信息,请参阅此post,但要点是使用=
复制指向内存列表的指针。而使用append
确保列表中包含的数据是重复的,而不是列表指针本身。