一道Python题
最近有朋友“考”了我一个Python的题:使用+=
和.extend()
两种方法扩展元组中的列表会发生什么。虽然我对Python中的可变数据类型、不可变数据类型的概念都有较深的理解,并且也对list的+
、+=
、.extend()
、.append()
做过性能分析,但是+=
和.extend()
两者无论在表现(是否为原地址修改)以及性能上都非常近似,所以对两者的区别还没有明确的概念。为了解答这个问题,我我们先直接上代码试验一下:
# 创建一个包含列表的元组:
>>> a_tuple = (1, 2, [])
>>> a_tuple[2] += ['a', 'b'] # (1)
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
a_tuple[2] += ['a', 'b']
TypeError: 'tuple' object does not support item assignment
>>> a_tuple[2].extend(['a', 'b']) # (2)
>>> a_tuple # (3)
(1, 2, ['a', 'b', 'a', 'b'])
- (1) 通过
+=
的方法扩展列表出现“元组不支持元素赋值”的报错。 - (2) 使用
.extend()
方法。 - (3) 有趣的是,列表被扩展了两次。虽然
+=
报错,但是却成功修改了列表。