>我正在做一个问题,比如单词梯。 最初我有一个字符串列表:paths = [[A]]
. 现在 B、C 和 D 都是字符串,只比较一个不同的字母 到 A.我想做的是
[[A]] with [B,C,D] -> paths = [[A,B], [A,C], [A,D]]
但是,如果我复制[[A]]
三分驯服来准备paths = [[A], [A], [A]]
使用 paths = [paths[0]]*3
,然后执行以下操作:
i=0
for word in [B,C,D]:
newpath = paths[i]
paths.append(newpath.append(word))
i += 1
这显示了[[A, B, C, D], [A, B, C, D], [A, B, C, D]]
.似乎每个副本上的操作相同。即使我用了paths = [paths[0] for i in range(3)]
,它仍然是一样的。我怎样才能避免它?我的代码有什么问题?
!
在paths = [paths[0] for i in range(3)]
中,paths[0]
仍然是对同一个列表的引用。你可能想要paths = [paths[0].copy() for i in range(3)]
.
你可以把下面的代码放到pythontutor可视化中,以检查它是如何工作的:
paths = [['A']]
paths = [paths[0] for i in range(3)]
otherpaths = [['A']]
otherpaths = [otherpaths[0].copy() for i in range(3)]