L'affectation à une tranche nécessite un itérable sur le côté droit.
'1'
est itérable, tandis que 1
ne l'est pas. Considérez ce qui suit :
In [7]: a=[]
In [8]: a[:]='abc'
Le résultat est :
In [9]: a
Out[9]: ['a', 'b', 'c']
Comme vous pouvez le voir, la liste devient chaque caractère de la chaîne de caractères comme un élément séparé. C'est une conséquence du fait qu'en itérant sur une chaîne de caractères, on obtient ses caractères.
Si vous souhaitez remplacer une série de a
avec un seul scalaire, il suffit d'envelopper le scalaire dans une sorte d'itérable :
In [11]: a[:]=(1,) # single-element tuple
In [12]: a
Out[12]: [1]
Cela s'applique également aux chaînes de caractères (à condition que la chaîne soit traitée comme un élément unique et non comme une séquence de caractères) :
In [17]: a[:]=('abc',)
In [18]: a
Out[18]: ['abc']