Возможный дубликат:
Почему + = ведет себя неожиданно в списках?Сегодня я обнаружил интересную« особенность »языка Python, которая сильно меня огорчила.
>>> a = [1, 2, 3] >>> b = "lol" >>> a = a + b TypeError: can only concatenate list (not "str") to list >>> a += b >>> a [1, 2, 3, 'l', 'o', 'l']
Как это? Я думал, что эти два должны быть эквивалентными! Хуже того, это код, который я чертовски потратил на отладку
>>> a = [1, 2, 3] >>> b = {'omg': 'noob', 'wtf' : 'bbq'} >>> a = a + b TypeError: can only concatenate list (not "dict") to list >>> a += b >>> a [1, 2, 3, 'omg', 'wtf']
WTF! У меня были списки и диктовки в моем коде, и я задавался вопросом, как черт возьми, я закончил тем, что добавил ключи своего dict в список, даже не вызывая .keys (). Как оказалось, именно так.
Я думал, что эти два оператора должны быть эквивалентны. Даже игнорируя это, я может как бы понять, как вы добавляете строки в списки (поскольку строки - это просто массивы символов), но словари? Может быть, если бы он добавил список кортежей (ключ, значение), но захват только ключей для добавления в список кажется совершенно произвольным.
Кто-нибудь знает логику этого?