python3 del关键字
1、介绍
python中,del关键字可以用于销毁对象。
- 一方面,可以用于实现业务,比如删除集合的元素。
- 另一方面,可以节约内存资源,提升程序效率。
class Stu:
def __init__(self):
self.name = 'abc'
def __del__(self):
print('del')
stu_1 = Stu()
stu_2 = Stu()
time.sleep(5)
print(stu_1)
print(stu_2)
print('abc')
"""
<__main__.Stu object at 0x000001F850B7BFD0>
<__main__.Stu object at 0x000001F850B7BF10>
abc
del
del
"""
- Python 有自动的垃圾回收机制,能自动将不需要使用的实例对象进行销毁。
- 在对象被销毁时,会调用其__del__方法,注意并不是对象没有引用就立即销毁
- 该方法默认并没有什么特殊作用
2、del使用
2.1 删除对象
class Stu:
def __init__(self):
self.name = 'abc'
def __del__(self):
print('del')
stu_1 = Stu()
stu_2 = Stu()
time.sleep(5)
del stu_2
print(stu_1)
print(stu_2)
"""
NameError: name 'stu_2' is not defined
del
<__main__.Stu object at 0x000001BFA835BFD0>
del
"""
- del删除对象时,会调用该对象的__del__方法
- 删除之后,对象不再存在,相当于未定义,使用会报异常
- 即使报异常,程序不再执行,但是也会对各对象进行销毁,调用各自的__del__方法
2.2 删除对象属性
class Stu:
def __init__(self):
self.name = 'abc'
def __del__(self):
print('del')
stu_1 = Stu()
stu_2 = Stu()
time.sleep(5)
del stu_2.name
print(stu_1)
print(stu_2)
print(stu_2.name)
"""
AttributeError: 'Stu' object has no attribute 'name'
<__main__.Stu object at 0x00000163AFEFBFD0>
<__main__.Stu object at 0x00000163AFEFBF70>
del
del
"""
- 删除对象属性,不影响对象和其他属性,相当于未定义被删除属性
2.3 删除集合元素
arr = [1,2,3,4,5]
del arr[2]
print(arr)
del arr[2:]
print(arr)
arr = [1,2,3,4,5]
del arr[::2]
print(arr)
d = {'abc':'d', '12':'3', 'z':'fff'}
del d['12']
print(d)
"""
[1, 2, 4, 5]
[1, 2]
[2, 4]
{'abc': 'd', 'z': 'fff'}
"""
- 注意,字典无法一次性删除多个