python垃圾语言-Python中垃圾回收和del语句详解

Python中的垃圾回收算法是采用引用计数, 当一个对象的引用计数为0时, Python的垃圾回收机制就会将对象回收

a = "larry"

b = a

larry这个字符串对象, 在第一行被贴了a标签后, 引用计数为1, 之后在第二行, 由贴上了b标签, 此时, 该字符串对象的引用计数为

a = "larry"

b = a

del a

注意: 在Python语言中, del语句操作某个对象的时候, 并不是直接将该对象在内存中删除, 而是将该对象的引用计数-1

>>> a = "larry"

>>> b = a

>>> del a

>>> id(b)

4572141808

>>> id(a)

Traceback (most recent call last):

File "", line 1, in

id(a)

NameError: name "a" is not defined

从以上示例中可以看出, larry这个字符串对象在第一行被贴上了a标签, 此时字符串对象的引用计数为1, 接着第二行又被贴上了b标签, 此时该字符串对象的引用计数为2, 在第三行中, del语言删除了a变量(标签), 在后续的print中可以看出, 内存中实际的字符串对象并没有被删除, del语言只是删除了一个变量对该字符串对象的引用, 所以对于larry这个字符串对象来说, 效果只是引用计数-1

魔法函数之__del__

类中的__del__魔法函数, 支持我们自定义清理对象的逻辑, 当Python解释器使用del语言删除类的对象的时候, 会自动调用类中的__del__函数, 我们可以对其进行重载

>>> class Ref:

...

... def __init__(self, name):

... self.name = name

...

... def __del__(self):

... print("删除对象")

... del self.name

...

>>>

>>> r = Ref(name="larry")

>>> print(r.name)

larry

>>>

>>> del r

删除对象

>>>

>>> print(r.name)

Traceback (most recent call last):

File "", line 1, in

print(r.name)

NameError: name "r" is not defined

我们可以通过重载__del__魔法函数, 自己灵活控制在del 对象的时候执行哪些善后操作

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
try-except语句Python的异常处理机制。它的作用是在代码执行过程,当出现异常时,程序可以捕获这个异常并进行处理,而不是让程序崩溃。try-except语句的基本语法如下: ```python try: # 可能出现异常的代码块 except ExceptionType: # 处理异常的代码块 ``` 在try语句,我们需要编写可能会出现异常的代码。如果try语句的代码执行过程发生了异常,就会跳转到相应的except语句,并执行其的代码。except语句的ExceptionType表示要捕获的异常类型,比如ZeroDivisionError、ValueError等等。如果不指定ExceptionType,就会捕获所有异常。当然,我们也可以在一个try语句使用多个except语句块,分别捕获不同类型的异常。例如: ```python try: # 可能出现异常的代码块 except ZeroDivisionError: # 处理 ZeroDivisionError 异常的代码块 except ValueError: # 处理 ValueError 异常的代码块 except: # 处理其他异常的代码块 ``` 除了使用except语句块来处理异常之外,还可以使用finally语句块。finally语句的代码无论是否发生异常都会被执行。例如: ```python try: # 可能出现异常的代码块 except: # 处理异常的代码块 finally: # 无论是否发生异常都会被执行的代码块 ``` 最后需要注意的是,try-except语句的代码应该尽可能地简洁,以便于快速定位和处理异常。如果try语句的代码过于复杂,可能会导致异常处理变得困难。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值