a + = b не то же самое, что a = a + b [дубликат]

Возможный дубликат:
Почему + = ведет себя неожиданно в списках?

Сегодня я обнаружил интересную« особенность »языка 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 (). Как оказалось, именно так.

Я думал, что эти два оператора должны быть эквивалентны. Даже игнорируя это, я может как бы понять, как вы добавляете строки в списки (поскольку строки - это просто массивы символов), но словари? Может быть, если бы он добавил список кортежей (ключ, значение), но захват только ключей для добавления в список кажется совершенно произвольным.

Кто-нибудь знает логику этого?

36
задан martineau 31 October 2019 в 15:54
поделиться