gpt4 book ai didi

python - 将二维 python 列表初始化为 [[9]*3]*3 似乎创建了对同一数组的引用。这是怎么回事?

转载 作者:行者123 更新时间:2023-12-01 00:06:47 24 4
gpt4 key购买 nike

根据数组的初始化方式,二维数组的更新似乎会有所不同。

t = [[-9]*3]*3
t[0][1] = 5
#[[-9, 5, -9], [-9, 5, -9], [-9, 5, -9]]

这是意外的,因为每一行都会更新(第二列的值为 5)。

将其与以下内容进行对比:

t = [[-9, -9, -9], [-9, -9, -9], [-9, -9, -9]]
t[0][1] = 5
#[[-9, 5, -9], [-9, -9, -9], [-9, -9, -9]]

这符合预期。幕后发生了什么?

最佳答案

当您在 Python 中使用 * 运算符重复列表时,它只是创建对原始列表的重复引用,而不是创建多个独立列表。您可以使用Python的id函数来查找任何Python值的内部标识号,它可以用来判断两个相似的值实际上是否不同。例如:

>>> t = [[9]*3]*3
>>> t
[[9, 9, 9], [9, 9, 9], [9, 9, 9]]
>>> id(t[0])
4354326848
>>> id(t[1])
4354326848
>>> id(t[2])
4354326848


>>> t = [[-9, -9, -9], [-9, -9, -9], [-9, -9, -9]]
>>> id(t[0])
4354326912
>>> id(t[1])
4354327616
>>> id(t[2])
4354327168

观察第一种情况,所有三个 id 号都相同,而在第二种情况中,它们都不同。

因此,在第一种情况下,您确实对同一基础列表有三个引用,并且当您更改其中一个元素时,它们都会一起更改(因为它们实际上都是一个列表)。

关于python - 将二维 python 列表初始化为 [[9]*3]*3 似乎创建了对同一数组的引用。这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59925864/

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