我刚看到一些非常奇怪的东西.
>>> t = ([],)
>>> t[0].append('hello')
>>> t
(['hello'],)
>>> t[0] += ['world']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t
(['hello', 'world'],)
Run Code Online (Sandbox Code Playgroud)
为什么它会提升TypeError并改变list内部tuple?
Fel*_*ing 20
当我开始在评论中提及时,+=实际上就地修改了列表,然后尝试将结果分配给元组中的第一个位置.从数据模型文档:
调用这些方法来实现增强算术赋值(+ =, - =,=,/ =,// =,%=,* =,<< =,>> =,&=,^ =,| =).这些方法应该尝试就地执行操作(修改self)并返回结果(可能是,但不一定是self).
+= 因此相当于:
t[0].extend(['world']);
t[0] = t[0];
Run Code Online (Sandbox Code Playgroud)
因此,就地修改列表不是问题(1.步骤),因为列表是可变的,但是将结果返回给元组是无效的(2.步骤),并且这是抛出错误的地方.
| 归档时间: |
|
| 查看次数: |
770 次 |
| 最近记录: |