所以这只是让我大吃一惊.我正在编写一个python代码,我在其中创建一个列表,将其附加到主列表并清除第一个列表以向其添加更多元素.当我清除第一个列表时,即使主列表也被清除.我在很多列表中附加并清除但从未观察到这一点.
list1 = []
list2 = []
list1 = [1,2,3]
list2.append(list1)
list1
[1, 2, 3]
list2
[[1, 2, 3]]
del list1[:]
list1
[]
list2
[[]]
Run Code Online (Sandbox Code Playgroud)
我知道这会附加字典,但我不知道如何处理列表.有人可以详细说明吗?
我正在使用Python2.7
list将a 传递给类似的方法append只是将引用传递给相同的list引用list1,这样就是附加到的方法list2.他们仍然是相同的list,只是从两个不同的地方引用.
如果你想切断它们之间的联系,可以:
list1,而不是list1其本身,例如list2.append(list1[:]),或list1一个新的list后,append荷兰国际集团,而不是在地方清理,改变del list1[:]到list1 = []注:这是一个有点不清楚,但如果你想在内容中list1要添加到list2(所以list2应该成为[1, 2, 3]不[[1, 2, 3]]与嵌套的值list),你想打电话list2.extend(list1),不append,在这种情况下,不需要浅拷贝; 从价值观list1在那个时候会被单独append编,并没有进一步的领带将存在之间list1和list2(因为价值是不可变的intS;如果他们是可变的,也就是说,嵌套的listS,dictS,等等,你需要将它们复制到完全切断领带,例如copy.deepcopy用于复杂的嵌套结构).