>> print bla [['blub'], ['blub'], ['-6ren">
gpt4 book ai didi

python - python 中奇怪的二维列表行为

转载 作者:行者123 更新时间:2023-11-28 20:28:41 25 4
gpt4 key购买 nike

为什么python会做下面的事情?

>>> bla = [[]] * 5
>>> bla[3].append("blub")
>>> print bla
[['blub'], ['blub'], ['blub'], ['blub'], ['blub']]

我希望

[[], [], [], ['blub'], []]

最佳答案

这是与 Python 混淆的一个常见点,与隐式按引用传递有关。当你打字时

x = []

绑定(bind)名称 x 以指向内存中的空列表。当你这样做的时候

x = [[]] * 5

将名称 x 绑定(bind)为指向包含五个事物的列表,其中每个事物都是对相同 空列表的引用。如果您这样想,这可能会更清楚:

>>> y = []
>>> x = [y]*5
>>> x
[[], [], [], [], []]
>>> x[0].append(0)
>>> x
[[0], [0], [0], [0], [0]]
>>> y
[0]

也就是说,即使 [] 没有绑定(bind)任何变量名,它仍然会创建一个空列表的引用,然后将其复制五次。

如果您不想这样,您需要显式构造五个 个空列表以存储在x 中。有多种方法可以做到这一点(copy.deepcopy 是一个通用的解决方案),但我认为最巧妙的是:

x = [[] for _ in range(5)]

或者,numpy 是一个扩展模块,它提供了一个非常强大的多维数组。

关于python - python 中奇怪的二维列表行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4451553/

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