Python:将一个列表附加到另一个列表并清除第一个列表
这让我大吃一惊。我正在编写一个python代码,其中我创建了一个列表,将其附加到主列表中,并清除第一个列表以向其中添加更多元素。当我清除第一个列表时,甚至主列表也会被清除。我处理了很多列表附件和清除,但从未观察到这一点Python:将一个列表附加到另一个列表并清除第一个列表,python,list,Python,List,这让我大吃一惊。我正在编写一个python代码,其中我创建了一个列表,将其附加到主列表中,并清除第一个列表以向其中添加更多元素。当我清除第一个列表时,甚至主列表也会被清除。我处理了很多列表附件和清除,但从未观察到这一点 list1 = [] list2 = [] list1 = [1,2,3] list2.append(list1) list1 [1, 2, 3] list2 [[1, 2, 3]] del list1[:] list1 [] list2 [[]] 我知道在附加字典时会发生这种
list1 = []
list2 = []
list1 = [1,2,3]
list2.append(list1)
list1
[1, 2, 3]
list2
[[1, 2, 3]]
del list1[:]
list1
[]
list2
[[]]
我知道在附加字典时会发生这种情况,但我不知道如何处理列表。有人能详细说明一下吗
我正在使用Python2.7将
列表
传递给类似append
的方法只是传递对list1
引用的同一列表
的引用,因此这就是添加到list2
的内容。它们仍然是相同的列表
,只是从两个不同的地方引用
如果要切断它们之间的联系,请执行以下任一操作:
list1
,而不是list1
本身,例如list2.append(list1[:])
,或del list1[:]
更改为list1=[]
注意:这有点不清楚,但是如果您想将
list1
的内容添加到list2
(因此list2
应该变成[1,2,3]
而不是[1,2,3]
和嵌套的列表中的值),您应该调用list2.extend(list1)
,而不是append
,在这种情况下,不需要浅拷贝;当时list1
中的值将单独append
ed,并且list1
和list2
之间不会存在进一步的联系(由于值是不可变的,例如嵌套的list
s、dict
s等,因此需要复制它们以完全断开连接,例如,对于复杂的嵌套结构)。因此基本上代码就是这样做的:
删除前
删除后
简而言之,两个列表名称都指向同一个列表对象
同样的问题也发生在我身上
original_list = ["a.csv", "b.csv"]
copied_list = original_list
original_list.clear()
当我这样做时,两个列表(原始列表和复制列表)都会被清除。作为解决方案,对我有效的是
original_list = ["a.csv", "b.csv"]
copied_list = original_list
original_list = [] # original_list is refreshed with a fresh list.
这也行得通,
original_list = ["a.csv", "b.csv"]
copied_list = original_list[:]
多亏了@ShadowRanger.这可能会提供一些见解: