在基于列表的方法中,从列表索引0开始的字符串被获取并修改,然后再放回到索引0处的列表中。 由于这短暂的时间,解释器在列表中仍然具有旧版本的字符串,并且不能就地执行修改。 如果您查看Python的源代码,那么您会发现不支持在适当位置修改列表的元素。因此,必须从列表中检索对象(在这种情况下为字符串),进行修改然后放回去。 换句话说list
,str
类型与+=
操作员的类型支持完全无关。
并考虑以下代码:
l = ['abc', 'def']
def nasty():
global l
l[0] = 'ghi'
l[1] = 'jkl'
return 'mno'
l[0] += nasty()
的值l
就是['abcmno', 'jkl']
这证明了'abc'
从列表中获取,则nasty()
得到了执行修改的列表中,字符串的内容'abc'
和'mno'
得到级联和结果被分配到l[0]
。如果nasty()
在访问之前对其进行了评估l[0]
以对其进行修改,那么结果将为'ghimno'
。