gpt4 book ai didi

python - 修改元组上的列表。我收到类型错误,但元组值已更改

转载 作者:行者123 更新时间:2023-11-30 23:30:27 26 4
gpt4 key购买 nike

我正在尝试:

>>> a = []
>>> id(a)
42952968L
>>> a.append(1)
>>> a
[1]
>>>id(a)
42952968L
>>> a += [2]
>>> a
[1, 2]
>>> id(a)
42952968L
>>> a = a +[3]
>>> a
[1, 2, 3]
>>> id(a)
43001480L

我知道我们使用 a.append(1)a += [2]id(a)没有改变。当使用 a = a +[3]id(a)已更改。

现在,我这样使用:

>>> c = ([], [])
>>> id(c)
43002440L
>>> c[0].append(1)
>>> c
([1], [])
>>> id(c)
43002440L
>>> c[0] += [2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> c
([1, 2], [])
>>> id(c)
43002440L

我使用c[0].append(1)是对的,当我尝试c[0] += [2]时,我遇到了类型错误。但是我找到了 c值已更改。

最佳答案

c[0] += [2] 发生在多个步骤中,大致相当于以下内容:

import operator
x = c[0]
x = operator.iadd(x, [2])
c[0] = x

首先,Python 获取c[0]。这部分工作正常。

第二部分可能看起来有点奇怪。 Python 要求它以 c[0] 形式获得的对象将 [2] 添加到自身中。列表 [1] 必须,变成 [1, 2]。不同的数据类型可能不会就地实现此功能,而是返回一个新对象。列表会修改自身并返回自身。

然后,Python 尝试将 [1, 2] 分配给 c[0]。此步骤失败,并给出 TypeError,但列表已在步骤 2 中修改。

关于python - 修改元组上的列表。我收到类型错误,但元组值已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20583527/

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