gpt4 book ai didi

Python:在列表中复制列表

转载 作者:IT老高 更新时间:2023-10-28 20:50:24 25 4
gpt4 key购买 nike

希望有人可以在这里帮助我。

我对 Python 很陌生,我正在努力找出我做错了什么。

我已经搜索并发现可以链接 Python 变量,以便更改一个会更改另一个,并且我已经使用 id() 函数进行了大量测试以掌握这个概念。但我似乎发现了一个异常(exception),希望有人能解释一下……

首先,以下工作按预期制作列表的独立副本。

>>> a = [0,0]
>>> b = a[:]
>>> print a is b
False
>>> b[0]=1
>>> print a
[0,0]
>>> print b
[1,0]

但如果我稍微改变一下,使 a 是列表中的列表,它就会改变......

>>> a = [[0,0],[0,0]]
>>> b = a[:]
>>> print a is b
False
>>> b[0][0]=1
>>> print a
[[1, 0], [0, 0]]
>>> print b
[[1, 0], [0, 0]]

现在我们看到 b 的任何更新也将适用于 a,但是 print a is b 的结果返回 ??我也对 id() 进行了检查,一切都说它们是相互独立的,但是当我更新一个时,同样适用于另一个??

谁能解释一下??

注意我正在运行 http://labs.codecademy.com/#:workspace 的这些,所以我的第一个想法是这只是他们网站上的一个错误,但我不知道?

编辑:

感谢大家迄今为止的精彩回答。那太快了!我知道这可能以前被问过,但很难搜索。

由于所有答案都是正确的,我会等一天再打分。拥有最多 +1 的人将获得标记 :)

最佳答案

b = a[:] 创建一个 shallow copy a 中的可变列表,因此更改 b 中的可变列表仍然会影响 a 中的相同列表

换句话说,ab 并不指向同一个列表(这就是为什么 a 不是 b),而是到两个不同的列表,它们都包含相同的两个列表。您通过 b[0][0] = 1 更改其中一个列表,并且该更改显示在 a 中。

你提到你在玩id(),所以看看这个:

>>> a = [[0,0],[0,0]]
>>> b = a[:]
>>> id(a)
2917280 # <----+
>>> id(b) # |----- different!
2771584 # <----+
>>> id(a[0]), id(a[1])
(2917320, 2917360) # <----+
>>> id(b[0]), id(b[1]) # |----- same!
(2917320, 2917360) # <----+

关于Python:在列表中复制列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17497067/

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