del 语句(基础篇)
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 语句(基础篇)相关推荐
- SQL语句——基础篇
SQL语句 数据库 1.创建数据库 create database 数据库名 2.删除数据库 drop database 数据库名 3.切换数据库 use 数据库名 4.查看所有数据库 show da ...
- spring Boot 2 基础篇 。内含 整合一个spring boot 的 小案例
目录 springBoot2基础篇 前言与开发环境 一.快速创建Boot项目 1.使用spring提供的快速构建 2.基于maven的手动构建 3.在Idea中隐藏指定文件/文件夹 二.SpringB ...
- SpringBoot2零基础到项目实战-基础篇
springboot2零基础到项目实战-基础篇 课程内容说明 课程单元 学习目标 基础篇 能够创建SpringBoot工程 基于SpringBoot实现ssm/ssmp整合 应用篇 能够掌握Sprin ...
- oracle数据定义语句,oracle(sql)基础篇系列(3)——数据维护语句、数据定义语句、伪列...
oracle(sql)基础篇系列(三)--数据维护语句.数据定义语句.伪列 DML语句 insert 向表中插入新的记录 --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 ...
- MySQL基础回顾(六):数据查询语言DQL---select查询语句总结(篇一)
目录 先建一个数据库和若干张表 完整语法 1.基础查询 2.字段别名 3.去重 4.where子句查询 5.模糊查询 6.联表查询 7.分页和排序 8.子查询和嵌套查询 9.分组查询和having语句 ...
- python 动态执行条件判断_【人生苦短,我学 Python】基础篇——条件判断与循环语句(Day12)_不积跬步,无以至千里!-CSDN博客...
原文作者:AI 菌 原文标题:[人生苦短,我学 Python]基础篇--条件判断与循环语句(Day12) 发布时间:2021-02-08 23:17:06 写在前面:大家好!我是[AI 菌],一枚爱弹 ...
- 数据库sql语句练习 基础篇
学习数据库,做的练习题记录下来,方便那些想要练习的人 文章目录 数据库建表 1.customer表 2. product 3.order表 4.vendor表 5. recruit表 数据库习题单表查 ...
- python基础篇{控制流语句}
控制流语句 条件控制 单条件判断 多条件判断 练习 循环控制 while语句 for语句 range函数 练习 break 和 continue 语句 break语句 continue python ...
- SQL常用语句(基础篇)
SQL常用语句(基础篇) 说明:创建数据库 CREATE DATABASE database-name 说明:删除数据库 drop database dbname 说明:备份sql server -创 ...
- python基础(part1)--注释/变量/del语句
鄙人学习笔记 开发工具:Spyder 文章目录 注释 单行注释 多行注释 变量 绘制内存图练习(变量名所对应的内容改变) 绘制内存图练习(俩对象相加,得到全新的对象) del语句 举个例子 注释 单行 ...
最新文章
- 第十六周程序阅读(6)
- 干货来袭-整套完整安全的API接口解决方案
- openstack-5:安装rabbitmq
- 【Python 19】BMR计算器3.0(字符串分割与格式化输出)
- 使用Atom快速打造好用的Markdown编辑器
- el-table中奇偶行背景色显示不同的颜色
- 如何生成可变表头的excel
- Cap04_项目整体管理
- ubuntu16.04下pycharm中无法使用中文输入法
- hdfs用fileutil读取文件内容_MoviePy - 用Python玩转视频剪辑!(MoviePy安装及视频文件读取)
- 拉普拉斯算子属于卷积方法吗_二维图像中的Laplace算子和图论中的Laplacian矩阵...
- mysql与nagios的结合使用
- 计算机网络超详细笔记(六):传输层
- [LeetCode] Binary Tree Level Order Traversal
- php bug修复,PHPWind BUG修复
- 普通话-汉语拼音字母表
- 同宇新材冲刺深交所:年营收9.47亿 张驰与苏世国为实控人
- OpenFoam-6 导入并编译一个新湍流模型
- cad卸载不干净_流氓软件卸不干净?这6款超强软件卸载神器专治各种流氓软件!...
- vulnhub matrix
热门文章
- 生物信息学概论_英国爱丁堡大学生物相关硕士- 系统与合成生物学理学硕士详解+案例分享...
- 2018-2019-20172329 《Java软件结构与数据结构》第五周学习总结
- 传奇服务器怪物不显示名字,传奇小地图显示怪物的一个问题
- 扑克牌练习 【数据结构】
- 一次安装IE11浏览器的经历
- win10无限蓝屏_WIN10无限重启怎么解决,现在开不了机
- “数据中台”在安防行业的应用与发展
- 如何获取未安装apk应用的包名、应用名以及版本信息等
- 产品目标拆解:结构化思维
- Xmind进阶教程:配色指南