In [7]: a= [1,2] #定义一个list In [8]: a+[3,4] # 使用+操作 Out[8]: [1, 2, 3, 4] In [9]: a Out[9]: [1, 2] In [10]: a.extend([3,4]) # 使用extend操作,其实是在修改a In [11]: a # 打印a Out[11]: [1, 2, 3, 4] In [12]: a.extend((5,6)) # 这里使用extend一个元组 In [13]: a # 打印 Out[13]: [1, 2, 3, 4, 5, 6]
再看下面的示例二
In [14]: a =[1,2] In [15]: id(a) Out[15]: 1801141280328 In [16]: a.extend([3,4]) In [17]: id(a) Out[17]: 1801141280328 In [18]: c = a+[5,6] In [19]: id(c) Out[19]: 1801126648200
由示例2知: extend操作之后,对象还是那个对象 ,但+操作之后,对象就变化了.
由示例1知: extend操作即可传参是list类型,也可以是元组tuple类型, 因为extend其实是调用了基类MutableSequence中的魔法函数__iadd__, 以下是源码
def __iadd__(self, values): self.extend(values) return self
def extend(self, values): 'S.extend(iterable) -- extend sequence by appending elements from the iterable' for v in values: self.append(v)
由源码可知:
(1) return self , 所以我们示例中extend操作之后id值不变
(2) extend(iterable) , 所以只要是可迭代的对象都可以作为extend()函数的入参, 所以a.extend([3,4])可以, a.extend((5,6)) 也可以, a.extend({33,44})同样也可以
日拱一卒无有尽,功不唐捐终入海