python中的del用法

文章详细阐述了Python中del语句的三种主要用法:解除变量对数据对象的引用、删除变量名以及对列表元素的操作。强调了del并不直接删除数据,而是断开变量与数据之间的关联,只有当引用计数为零时,内存才会回收。同时,通过示例说明了del如何影响列表的内容。
部署运行你感兴趣的模型镜像

1. 用法1

由于python都是引用,而python有GC机制,所以,del语句作用在变量上,而不是数据对象上。 弄清del的用法,可以帮助深入理解python的内存方面的问题。

数据是保存在内存中,而变量只是一个链接,指向内存地址,而变量的赋值的本质是,新的变量也指向内存中的相同地址,只有所有链接都被删除了,那块内存才会被回收,那块内存区域中保存的数据就不复存在了。

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  

2. 用法2

使用del语句,删除到变量到对象的引用和变量名称本身。

注意del语句作用在变量上,而不是数据对象上。

2.1 示例1:

a = 0
b = a
del a # 删除变量a到0的引用,并且删除变量名称a
print(a)

结果:
结果
2.2. 示例2:

a = 0
b = a
del a # 删除变量a到0的引用,并且删除变量名称a
print(b)

结果:

0

2.3 示例3:

a = [0,1,2,3,4]
b = a[0]
del b # 删除变量b到0的引用,并且删除变量名称b
print(a)

结果:

[0,1,2,3,4]

3. 用法3:

del语句用于list列表操作,删除一个或连续几个元素
3.1. 示例1:

a = [0,1,2,3,4]
b = a[0]
del a[0] # 删除列表a中的第0个元素0
print(a)

结果:

[1,2,3,4]

3.2 示例2:

a = [0,1,2,3,4]
del a[0:3] # 删除列表a中的第0-3个元素,含头不含尾。
print(a)

结果:

[3,4]

4. 相关链接

  1. python中del函数的用法总结
  2. python中的del用法

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### Python 中 `del` 的使用详解 在 Python 中,`del` 是一个用于删除对象、变量、列表元素、字典键值对等的操作语句。它并不直接释放内存,而是减少对象的引用计数。当对象的引用计数变为零时,垃圾回收机制会自动回收该对象所占用的内存[^1]。 #### 删除变量 使用 `del` 可以删除一个变量,使其不再可用。例如: ```python x = 10 del x print(x) # 会抛出 NameError: name 'x' is not defined ``` 此操作会删除变量 `x`,之后尝试访问 `x` 将引发 `NameError`。 #### 删除列表元素 `del` 可以用于删除列表中的特定元素,通过索引指定要删除的元素位置: ```python li = [1, 2, 3, 4, 5] del li[0] print(li) # 输出 [2, 3, 4, 5] ``` 删除操作仅移除指定索引处的元素,并不会影响其他元素的值。即使删除了列表中的某个元素,其他变量对原数据的引用仍然有效[^3]。 #### 删除集合中的元素 虽然 `del` 不能直接用于删除集合中的某个特定元素(因为集合是无序的,不支持索引),但可以用于删除整个集合: ```python s = {1, 2, 3, 4} del s print(s) # 会抛出 NameError: name 's' is not defined ``` 此操作会删除整个集合对象,之后尝试访问 `s` 将引发错误[^2]。 #### 删除字典中的键值对 `del` 也可以用于删除字典中特定的键值对: ```python d = {'a': 1, 'b': 2, 'c': 3} del d['b'] print(d) # 输出 {'a': 1, 'c': 3} ``` 如果尝试删除一个不存在的键,将引发 `KeyError`。 #### 删除切片 `del` 还可以与切片操作结合使用,删除列表中的一段连续元素: ```python li = [0, 1, 2, 3, 4, 5] del li[1:4] print(li) # 输出 [0, 4, 5] ``` 这将删除索引 1 到 3(不包括 4)之间的元素。 #### 注意事项 - `del` 删除的是变量名,而不是底层数据对象。如果多个变量引用同一个对象,删除其中一个变量不会影响其他变量对对象的引用[^3]。 - 在删除对象后,如果仍有其他变量引用该对象,则对象不会被销毁。 - `del` 并不保证立即释放内存,而是依赖于 Python 的垃圾回收机制。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值