a= ("x","y") b=["n","p"]
Сложить их не получилось
с=None c=a+b a=a+b b=a+b a+=b
b+=a
Пользуясь случаем сразу спрошу зачем существуют кортежи, в чем их преимущество перед списками? Знаю, что они неизменяемые, но можно ли это отнести к достоинствам?
a= ("x","y") b=["n","p"]
с=None c=a+b a=a+b b=a+b a+=b
b+=a
>>> b = bytearray(b'abc') >>> b bytearray(b'abc') >>> b + [1, 2] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytearray to list >>> b += [1, 2] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat list to bytearray >>> b.extend([1, 2]) >>> b bytearray(b'abc\x01\x02') >>>
>>> lst = [1, 2, 3] >>> >>> lst + 'abc' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "str") to list >>> >>> lst += 'abc' >>> lst [1, 2, 3, 'a', 'b', 'c'] >>>

4kpt_VЭто нужно не в книжке смотреть, а в документации. Но тут и без документации понятно, что это поведение не одижаемо для пользователя.
Эмм. Это никакой не баг :)
Лучано Ромальо. Python. К вершинам мастерства.
lst = lst + 'abc' - не работает
lst += 'abc' - работает

py.user.nextчето сомнения меня терзают по этому поводу.Поправте если я не прав.
Хотя вторая операция является сокращённой записью первой операции.
>>> a=[1,2,3] >>> id(a) 25782232 >>> a+=[4] >>> id(a) 25782232 >>> a= a+ [5] >>> id(a) 25767688 >>>
4kpt_VТам описано другое
вот тут описано почему так происходит
Operator Overload, __and__, (+) and __iand__ (+=)
Both + and += operators are defined for list. They are semantically similar to extend.
my_list + another_list creates a third list in memory, so you can return the result of it, but it requires that the second iterable be a list.
my_list += another_list modifies the list in-place (it is the in-place operator, and lists are mutable objects, as we've seen) so it does not create a new list. It also works like extend, in that the second iterable can be any kind of iterable.
lst = lst + [1, 2] - работает
lst += [1, 2] - работает
lst = lst + 'abc' - не работает
lst += 'abc' - работает
>>> lst = [1, 2, 3] >>> >>> lst + range(3) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "range") to list >>> >>> lst += range(3) >>> >>> lst [1, 2, 3, 0, 1, 2] >>>