#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 То же относится к любым другим типам элементов, в т.ч. и к элементам-спискам.
Комментариев нет:
Отправить комментарий