11
我只是在解释器中忙碌着,碰到一些我不明白的东西。当我创建一个列表作为元素的元组,然后尝试更新列表时,会发生一些奇怪的事情。例如,当我运行此:更新一个元组内的列表
tup = (1,2,3,[4,5])
tup[3] += [6]
我得到:
TypeError: 'tuple' object does not support item assignment
这正是我的预期。但是后来当我再次引用元组,我得到:
>>> tup
(1, 2, 3, [4, 5, 6])
所以名单,其实是更新尽管蟒蛇抛出异常。这是如何运作的?我无法想象我真的想要做这样的事情,但我仍然想知道发生了什么。谢谢。
我想这个答案会从另一个好处,那就是因为扩展不仅仅是'tup [3] .__ iadd __([6])';它是'tup [3] = tup [3] .__ iadd __([6])''。 'list .__ iadd__'返回它正在变异的同一个对象是很方便的。 – zondo
感谢您的文档链接!这是一个很大的帮助。 –
谢谢,我没有在文档中看到这一点。所以为了确保我理解这个权利,基本上在我的例子中,列表被更新,因为我只是在做tup [3] .__ iadd __([6]),然后python尝试(并失败)元组上的项目分配?所以我得到例外说它失败了,但到那时我们已经更新了列表? –