首页 > 技术文章 > list操作

z-qinfeng 2019-12-11 22:59 原文

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})同样也可以

推荐阅读