Python list添加元素的方法及区别
定义两个列表(分别是 list1 和 list3),并分别使用 +、extend()、append() 对这两个 list 进行操作,其操作的结果赋值给 l2。实例代码如下:tt = 'hello' #定义一个包含多个类型的 list list1 = [1,4,tt,3.4,"yes",[1,2]] print(list1,id(list1)) print("1.----------------") #比较 list 中添加元素的几种方法的用法和区别 list3 = [6,7] l2 = list1 + list3 print(l2,id(l2)) print("2.----------------") l2 = list1.extend(list3) print(l2,id(l2)) print(list1,id(list1)) print("3.----------------") l2 = list1.append(list3) print(l2,id(l2)) print(list1,id(list1))输出结果为:
[1, 4, 'hello', 3.4, 'yes', [1, 2]] 2251638471496
1.----------------
[1, 4, 'hello', 3.4, 'yes', [1, 2], 6, 7] 2251645237064
2.----------------
None 1792287952
[1, 4, 'hello', 3.4, 'yes', [1, 2], 6, 7] 2251638471496
3.----------------
None 1792287952
[1, 4, 'hello', 3.4, 'yes', [1, 2], 6, 7, [6, 7]] 2251638471496
- 使用“+”号连接的列表,是将 list3 中的元素放在 list 的后面得到的 l2。并且 l2 的内存地址值与 list1 并不一样,这表明 l2 是一个重新生成的列表。
- 使用 extend 处理后得到的 l2 是 none。表明 extend 没有返回值,并不能使用链式表达式。即 extend 千万不能放在等式的右侧,这是编程时常犯的错误,一定要引起注意。
- extend 处理之后, list1 的内容与使用“+”号生成的 l2 是一样的。但 list1 的地址在操作前后并没有变化,这表明 extend 的处理仅仅是改变了 list1,而没有重新创建一个 list。从这个角度来看,extend 的效率要高于“+”号。
- 从 append 的结果可以看出,append 的作用是将 list3 整体当成一个元素追加到 list1 后面,这与 extend 和“+”号的功能完全不同,这一点也需要注意。
Python list删除操作
接下来演示有关 del 的基本用法,实例代码如下:tt = 'hello' #定义一个包含多个类型的 list list1 = [1,4,tt,3.4,"yes",[1,2]] print(list1) del list1[2:5] print(list1) del list1[2] print(list1)输出结果为:
[1, 4, 'hello', 3.4, 'yes', [1, 2]]
[1, 4, [1, 2]]
[1, 4]
需要注意的是,在使用 del 关键字时,一定要搞清楚,删除的到底是变量还是数据。例如,下面代码演示和删除变量的方法:
tt = 'hello' #定义一个包含多个类型的 list list1 = [1,4,tt,3.4,"yes",[1,2]] l2 = list1 print(id(l2),id(list1)) del list1 print(l2) print(list1)运行结果如下:
1765451922248 1765451922248
[1, 4, 'hello', 3.4, 'yes', [1, 2]]
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\demo.py", line 8, in <module>
print(list1)
NameError: name 'list1' is not defined
除了删除变量,其他的删除都是删除数据,比如将列表中数据全部清空,实现代码如下:
tt = 'hello' #定义一个包含多个类型的 list list1 = [1,4,tt,3.4,"yes",[1,2]] l2 = list1 l3 = l2 del l2[:] print(l2) print(l3)输出结果为:
[]
[]
另外,在实际过程中,即便使用 del 关键字删除了指定变量,且该变量所占用的内存再没有其他变量使用,此内存空间也不会真正地被系统回收并进行二次使用,它只是会被标记为无效内存。
如果想让系统回收这些可用的内存,需要借助 gc 库中的 collect() 函数。例如:
#引入gc库 import gc tt = 'hello' #定义一个包含多个类型的 list list1 = [1,4,tt,3.4,"yes",[1,2]] del list1 #回收内存地址 gc.collect()