#python
На этот вопрос уже дан ответ здесь:
TypeError при изменении списка оператором += внутри кортежа
(1 ответ)
Закрыт 3 года назад.
>>> a = ([],)
>>> a[0].append('pochemy')
>>> a[0] += 'tak'
Traceback (most recent call last):
File "", line 1, in
TypeError: 'tuple' object does not support item assignment
>>> a
(['pochemy', 't', 'a', 'k'],)
Почему во втором случае выдается ошибка? Ведь +=, в данном случае, изменяет сам объект,
а не создает новый.
Ответы
Ответ 1
Потому что код: a[0] += 'tak' эквивалентен: x = a[0] x = x.__iadd__('tak') a[0] = x Вторая строчка нормально выполняется, изменяя список, но на третьей вылетает исключение, поскольку мы пытаемся изменить кортеж. Update: вот хорошее подробное объяснение https://ru.stackoverflow.com/a/482925/178077Ответ 2
x += y это короткая форма x = x + y. Как говорится в ошибке, кортежи не поддерживают присваивания элементов, по этому нельзя написать x = (1,2) x[0] = 3 Точно также нельзя написать x[0] = x[0] + 1 # или x[0] += 1 То же относится к любым другим типам элементов, в т.ч. и к элементам-спискам.
Комментариев нет:
Отправить комментарий