发现一个槽点。

看这个代码:

a = ([],)
a[0] += [1]

如果直接运行,第二行会报错:'tuple' object does not support item assignment

此时你如果看到报错了,就以为第二行代码没有生效,那你就错了。

实际上已经生效了。现在的 a 已经变成了 ([1],)

这是因为 += 操作,实际上是分两步,先原地计算,再赋值。这个例子中就是原地计算完成了,但是赋值没有完成。所以会报错,但是数据已经被改变了。

如果改成 a[0].extend([1]) 就不会报错了,因为少了赋值操作。