Страницы

Поиск по вопросам

четверг, 14 февраля 2019 г.

Почему в о одном случае возникает ошибка, а в другом нет? (python) [дубликат]

На данный вопрос уже ответили: TypeError при изменении списка оператором += внутри кортежа 1 ответ >>> 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'],)
Почему во втором случае выдается ошибка? Ведь +=, в данном случае, изменяет сам объект, а не создает новый.


Ответ

Потому что код:
a[0] += 'tak'
эквивалентен:
x = a[0] x = x.__iadd__('tak') a[0] = x
Вторая строчка нормально выполняется, изменяя список, но на третьей вылетает исключение, поскольку мы пытаемся изменить кортеж.
Update: вот хорошее подробное объяснение https://ru.stackoverflow.com/a/482925/178077

Комментариев нет:

Отправить комментарий