我确信这已经在某个地方得到了回答,但我不知道如何描述它。
假设我想创建一个包含 3 个空列表的列表,如下所示:
lst = [[], [], []]
我以为我这样做很聪明:
lst = [[]] * 3
但是我发现,在调试了一些奇怪的行为之后,这导致了一个子列表的追加更新,比如说lst[0].append(3)
,更新整个列表,[[3], [3], [3]]
而不是[[3], [], []]
.
但是,如果我用
lst = [[] for i in range(3)]
然后做lst[1].append(5)
给出了预期[[], [5], []]
我的问题是为什么会发生这种情况?有趣的是,如果我这样做
lst = [[]]*3
lst[0] = [5]
lst[0].append(3)
然后单元格 0 的“链接”被破坏,我得到了[[5,3],[],[]]
,但lst[1].append(0)
仍然导致[[5,3],[0],[0]
。
我最好的猜测是,在表单中使用乘法[[]]*x
会导致 Python 存储对单个单元格的引用......?