Ответ 1
Присвоение срезу требует итерации с правой стороны.
'1'
повторяется, а 1
- нет. Рассмотрим следующее:
In [7]: a=[]
In [8]: a[:]='abc'
Результат:
In [9]: a
Out[9]: ['a', 'b', 'c']
Как вы можете видеть, список получает каждый символ строки как отдельный элемент. Это является следствием того, что итерация по строке приводит к ее символам.
Если вы хотите заменить диапазон элементов a
на один скаляр, просто оберните скаляр в некотором итерабельном виде:
In [11]: a[:]=(1,) # single-element tuple
In [12]: a
Out[12]: [1]
Это также относится к строкам (при условии, что строка должна рассматриваться как отдельный элемент, а не как последовательность символов):
In [17]: a[:]=('abc',)
In [18]: a
Out[18]: ['abc']