假设我想创建一个列表列表,稍后再填充,如下所示:
[['', ''], ['', ''], ['', '']]
我可以这样创造:
rows=3
cols=2
A=['']*cols
B=[A[:]]*rows
但是,内部列表是相同的对象,如图所示:
B[0][0]='!'
print (B)
输出:
[['!', ''], ['!', ''], ['!', '']]
即使我使用了B=[A[:]]*rows
而不是B=[A]*rows
,也会出现这种情况;使用B=[A][:]*rows
并不能解决问题。你知道吗
如果A[:]
应该通过切片有效地创建完整副本(而不仅仅是引用),那么为什么会发生这种情况?你知道吗
附言
显然,这可以很容易地解决,例如:
this_text=[]
temp=[]
for i in range(cols):
A.append('')
for i in range(rows):
B.append(A[:])
我的目的是增进理解,而不是创建这个具体的列表。你知道吗
这将防止
B
成为副本列表,因为它会为每个x
创建一个新的A[:]
:取相同的
list
实例['' * cols]
行次。你知道吗更改对所述实例的一个引用将影响所有引用。你知道吗
使用理解来创建独立的列表。你知道吗
相关问题 更多 >
编程相关推荐