Страницы

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

понедельник, 6 января 2020 г.

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

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

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

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