比方说,我想创建一个列表列表供以后填充,如下所示:
[['', ''], ['', ''], ['', '']]
我可以这样创建它:
rows=3
cols=2
A=['']*cols
B=[A[:]]*rows
但是,内部列表是同一对象,可以看到:
B[0][0]='!'
print (B)
输出:
[['!', ''], ['!', ''], ['!', '']]
即使我使用B=[A[:]]*rows
而不是B=[A]*rows
,也会发生这种情况;使用B=[A][:]*rows
不能解决问题。
如果A[:]
应该通过切片A有效地创建完整副本(而不只是参考),那么为什么会发生这种情况?
P.S。
显然,这可以通过例如:
this_text=[] temp=[] for i in range(cols): A.append('') for i in range(rows): B.append(A[:])
我的目标是增进了解,而不是创建列表的此特定列表。
假设我要创建一个列表列表供以后填充,如下所示:[['',''],['',''],['','']]我可以创建像这样:rows = 3 cols = 2 A = [''] * cols B = [A [:]] * rows但是,...
B=[A[:]]*rows
这将防止B
成为副本列表,因为它会为每个A[:]
创建一个新的x
: