字符串是不可改變的,但是這不用於分配失敗的原因在for循環中,見下面的代碼:
In [272]: l=list('asdf')
In [273]: l
Out[273]: ['a', 's', 'd', 'f']
In [274]: for i in l:
...: i=chr(ord(i)+1)
...:
In [275]: l
Out[275]: ['a', 's', 'd', 'f']
列表對象是可變的,但仍然分配變化什麼到l
,因爲i=chr(ord(i)+1)
只是讓i
指nother string
2.在這種情況下,我們如何更改/替換列表中的值?
列表是可變的,你可以使用l[i]
指一個項目在l
,使用enumerate
讓你拿到指標迭代時:
In [299]: for i, v in enumerate(l):
...: l[i]+='z'
...:
In [300]: l
Out[300]: ['az', 'sz', 'dz', 'fz']
注即g雖然l
是可變的,l[0]
是仍然是不可變的:
In [301]: l=list('asdf')
In [302]: id(l[0])
Out[302]: 33639888
In [303]: for i, v in enumerate(l):
...: l[i]+='z'
In [304]: l
Out[304]: ['az', 'sz', 'dz', 'fz']
In [305]: id(l[0]) #what l[0] refers to has been changed
Out[305]: 110316288
不,他們不是。字符串是不可變的。 –
@AshwiniChaudhary:那是真的,但即使's'是一個列表,它在這裏也不會改變.. – DSM
@DSM你是對的它沒有。 –