python3 del关键字

发布时间 2023-06-09 16:17:17作者: 挖洞404

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)
"""
<__main__.Stu object at 0x0000024200A1BFD0>
<__main__.Stu object at 0x0000024200A1BF10>
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'}
"""
  •  注意,字典无法一次性删除多个