发现一个槽点。
看这个代码:
a = ([],)
a[0] += [1]
如果直接运行,第二行会报错:'tuple' object does not support item assignment
。
此时你如果看到报错了,就以为第二行代码没有生效,那你就错了。
实际上已经生效了。现在的 a
已经变成了 ([1],)
。
这是因为 += 操作,实际上是分两步,先原地计算,再赋值。这个例子中就是原地计算完成了,但是赋值没有完成。所以会报错,但是数据已经被改变了。
如果改成 a[0].extend([1])
就不会报错了,因为少了赋值操作。