我有一个列表a=[[1]]
和b=[i for i in a]
。现在我做b[0].append(2)
。当我打印a
和b
时,它们是相同的[[1, 2]]
和[[1, 2]]
。看起来列表b[0]
引用了一个相同的列表。为什么会这样?
a=[[1]]
b=[i for i in a]
b[0].append(2)
print a,b
输出:[[1, 2]] [[1, 2]]
答案 0 :(得分:3)
a
和b
是不同的列表。但a[0]
与b[0]
的列表相同,因为您在构建b
时没有复制它;这两个列表包含对相同子列表的引用。您可以使用以下内容制作子列表的副本:
b = [i[:] for i in a]
有关复制列表的其他方法,请参阅How to clone or copy a list?。
如果您想一次复制所有级别,可以使用copy.deepcopy()
import copy
b = copy.deepcopy(a)