gpt4 book ai didi

python - 使用乘法 ( * ) 意外行为生成子列表

转载 作者:太空狗 更新时间:2023-10-29 17:53:14 25 4
gpt4 key购买 nike

<分区>

我确定这个问题已经在某个地方得到了回答,但我不确定如何描述它。

假设我想创建一个包含 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 存储对单个单元格的引用...?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com