Me encontré con algo que era bastante extraño.¿Por qué + = de una lista dentro de una tupla de Python aumenta TypeError pero modifica la lista de todos modos?
>>> 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'],)
¿Por qué elevar TypeError
y sin embargo, cambiar el list
dentro del tuple
?
Supongo que tendrías que ver cómo '+ =' se implementa realmente. Parece que en realidad no crea una nueva lista, sino que cambia la lista in situ, esa es la parte '+'. Entonces tienes la tarea, pero como las tuplas son inmutables, esto no está permitido. –
@FelixKling + = funciona de forma similar a append(), es decir, id() de la lista permanece igual. –
También tenga en cuenta que para poder hacer un hash de una tupla, todas sus partes componentes también deben ser manejables. – mgilson