5.2. del 语句

有一种方式可以从列表按照给定的索引而不是值来移除一个元素: 那就是 del 语句。 它不同于会返回一个值的 pop() 方法。 del 语句也可以用来从列表中移除切片或者清空整个列表(我们之前用过的方式是将一个空列表赋值给指定的切片)。 例如:

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

del 也可以删除整个变量

>>> del a

此后再引用 a 时会报错(直到另一个值被赋给它)。

del 的详细讲解

del_stmt ::=  "del" target_list

删除是递归定义的,与赋值的定义方式非常类似。 此处不再详细说明,只给出一些提示。

目标列表的删除将从左至右递归地删除每一个目标。

名称的删除将从局部或全局命名空间中移除该名称的绑定,具体作用域的确定是看该名称是否有在同一代码块的 global 语句中出现。 如果该名称未被绑定,将会引发 NameError。

属性引用、抽取和切片的删除会被传递给相应的原型对象;删除一个切片基本等价于赋值为一个右侧类型的空切片(但即便这一点也是由切片对象决定的)。

根据我自己的理解,画了一个图解释一下(有问题请大家指出):

在 3.2 版更改: 在之前版本中,如果一个名称作为被嵌套代码块中的自由变量出现,则将其从局部命名空间中删除是非法的。

1. 为什么要用 del

使用del可以删去list的item或者dict的key

del mylist[4]
del mydict['key']

为什么不用赋予None的形式呢?

foo = None

我们对比一下del的形式

del foo

上面两个句子,我们可以清楚的看出del foo是删除作用域内的foo变量,而foo = None所表明的意思并不是很清楚,有可能被认为是无作用代码(dead code)。

另外,使用del会把变量从相应的命名空间中移除。

>>> a = [1, 2]
>>> del a[0]
>>> a
[2]
>>> b = [1, 2]
>>> b[0] = None
>>> b
[None, 2]

2.del 删除的到底是什么?

python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮助深入理解python的内存方面的问题。

python的del不同于C的free和C++的delete。

由于python都是引用,而python有GC机制,所以,del语句作用在变量上,而不是数据对象上。

if __name__=='__main__':  a=1       # 对象 1 被 变量a引用,对象1的引用计数器为1  b=a       # 对象1 被变量b引用,对象1的引用计数器加1  c=a       #1对象1 被变量c引用,对象1的引用计数器加1  del a     #删除变量a,解除a对1的引用  del b     #删除变量b,解除b对1的引用  print(c)  #最终变量c仍然引用1

del删除的是变量,而不是数据。

if __name__=='__main__':  li=[1,2,3,4,5]  #列表本身不包含数据1,2,3,4,5,而是包含变量:li[0] li[1] li[2] li[3] li[4]   first=li[0]     #拷贝列表,也不会有数据对象的复制,而是创建新的变量引用  del li[0]  print(li)      #输出[2, 3, 4, 5]  print(first)   #输出 1

del 语句(基础篇)相关推荐

  1. SQL语句——基础篇

    SQL语句 数据库 1.创建数据库 create database 数据库名 2.删除数据库 drop database 数据库名 3.切换数据库 use 数据库名 4.查看所有数据库 show da ...

  2. spring Boot 2 基础篇 。内含 整合一个spring boot 的 小案例

    目录 springBoot2基础篇 前言与开发环境 一.快速创建Boot项目 1.使用spring提供的快速构建 2.基于maven的手动构建 3.在Idea中隐藏指定文件/文件夹 二.SpringB ...

  3. SpringBoot2零基础到项目实战-基础篇

    springboot2零基础到项目实战-基础篇 课程内容说明 课程单元 学习目标 基础篇 能够创建SpringBoot工程 基于SpringBoot实现ssm/ssmp整合 应用篇 能够掌握Sprin ...

  4. oracle数据定义语句,oracle(sql)基础篇系列(3)——数据维护语句、数据定义语句、伪列...

    oracle(sql)基础篇系列(三)--数据维护语句.数据定义语句.伪列 DML语句 insert 向表中插入新的记录 --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 ...

  5. MySQL基础回顾(六):数据查询语言DQL---select查询语句总结(篇一)

    目录 先建一个数据库和若干张表 完整语法 1.基础查询 2.字段别名 3.去重 4.where子句查询 5.模糊查询 6.联表查询 7.分页和排序 8.子查询和嵌套查询 9.分组查询和having语句 ...

  6. python 动态执行条件判断_【人生苦短,我学 Python】基础篇——条件判断与循环语句(Day12)_不积跬步,无以至千里!-CSDN博客...

    原文作者:AI 菌 原文标题:[人生苦短,我学 Python]基础篇--条件判断与循环语句(Day12) 发布时间:2021-02-08 23:17:06 写在前面:大家好!我是[AI 菌],一枚爱弹 ...

  7. 数据库sql语句练习 基础篇

    学习数据库,做的练习题记录下来,方便那些想要练习的人 文章目录 数据库建表 1.customer表 2. product 3.order表 4.vendor表 5. recruit表 数据库习题单表查 ...

  8. python基础篇{控制流语句}

    控制流语句 条件控制 单条件判断 多条件判断 练习 循环控制 while语句 for语句 range函数 练习 break 和 continue 语句 break语句 continue  python ...

  9. SQL常用语句(基础篇)

    SQL常用语句(基础篇) 说明:创建数据库 CREATE DATABASE database-name 说明:删除数据库 drop database dbname 说明:备份sql server -创 ...

  10. python基础(part1)--注释/变量/del语句

    鄙人学习笔记 开发工具:Spyder 文章目录 注释 单行注释 多行注释 变量 绘制内存图练习(变量名所对应的内容改变) 绘制内存图练习(俩对象相加,得到全新的对象) del语句 举个例子 注释 单行 ...

最新文章

  1. 第十六周程序阅读(6)
  2. 干货来袭-整套完整安全的API接口解决方案
  3. openstack-5:安装rabbitmq
  4. 【Python 19】BMR计算器3.0(字符串分割与格式化输出)
  5. 使用Atom快速打造好用的Markdown编辑器
  6. el-table中奇偶行背景色显示不同的颜色
  7. 如何生成可变表头的excel
  8. Cap04_项目整体管理
  9. ubuntu16.04下pycharm中无法使用中文输入法
  10. hdfs用fileutil读取文件内容_MoviePy - 用Python玩转视频剪辑!(MoviePy安装及视频文件读取)
  11. 拉普拉斯算子属于卷积方法吗_二维图像中的Laplace算子和图论中的Laplacian矩阵...
  12. mysql与nagios的结合使用
  13. 计算机网络超详细笔记(六):传输层
  14. [LeetCode] Binary Tree Level Order Traversal
  15. php bug修复,PHPWind BUG修复
  16. 普通话-汉语拼音字母表
  17. 同宇新材冲刺深交所:年营收9.47亿 张驰与苏世国为实控人
  18. OpenFoam-6 导入并编译一个新湍流模型
  19. cad卸载不干净_流氓软件卸不干净?这6款超强软件卸载神器专治各种流氓软件!...
  20. vulnhub matrix

热门文章

  1. 生物信息学概论_英国爱丁堡大学生物相关硕士- 系统与合成生物学理学硕士详解+案例分享...
  2. 2018-2019-20172329 《Java软件结构与数据结构》第五周学习总结
  3. 传奇服务器怪物不显示名字,传奇小地图显示怪物的一个问题
  4. 扑克牌练习 【数据结构】
  5. 一次安装IE11浏览器的经历
  6. win10无限蓝屏_WIN10无限重启怎么解决,现在开不了机
  7. “数据中台”在安防行业的应用与发展
  8. 如何获取未安装apk应用的包名、应用名以及版本信息等
  9. 产品目标拆解:结构化思维
  10. Xmind进阶教程:配色指南