Python垃圾回收及性能分析

1.通过实例⽅法名字的字符串调⽤⽅法

我们有三个图形类 Circle,Triangle,Rectangle 他们都有⼀个获取图形⾯积的⽅法,但是⽅法名字不同,我们可以实现⼀个统⼀的获取⾯积的函 数,使⽤每种⽅法名进⾏尝试,调⽤相应类的接⼝。

class Triangle: 
  def __init__(self,a,b,c):
   self.a,self.b,self.c = a,b,c
  def get_area(self):
   a,b,c = self.a,self.b,self.c 
   p = (a+b+c)/2
   return (p * (p-a)*(p-b)*(p-c)) ** 0.5 
 class Rectangle: 
 def __init__(self,a,b): 
  self.a,self.b = a,b 
 def getArea(self):
  return self.a * self.b 
class Circle: 
 def __init__(self,r): 
  self.r = r 
 def area(self):
   return self.r ** 2 * 3.14159 

getattr(x,“y”,None) --> 等同于 x.y 当x中不含有y时,返回None。 map(func,iterable) --> 将iterable中的元素⼀⼀映射到func函数中处理,并且返回新的 map对象。

2.垃圾回收机制

在Python程序运⾏的时候,会在内存中开辟⼀块空间,⽤于存放临时变量;当计算完成之 后,就会将结果输出到永久性存储器中。如果数据量特别⼤,那内存空间管理不妥当的话就⾮ 常容易爆内存,程序可能直接终⽌。
在Python中,⼀切皆对象。所以,每⼀个变量,实际上都是对象的⼀个指针。所以,当这个 对象的引⽤计数(指针数)为0的时候,说明它也变成了垃圾,需要被放到回收箱中。
os模块:与操作系统交互的库。
psutil模块:
与系统交互的库,能够轻松实现获取系统运⾏的进程和系统利⽤率(包括CPU、内存、磁盘、 ⽹络等)信息。它主要⽤来做系统监控,性能分析,进程管理。
通过以下代码检测程序在运⾏时的内存消耗

import os
import psutil
def show_info(start):
    pid=os.getpid(<
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python垃圾回收机制是自动化的,它通过引用计数和循环垃圾收集两种方式来管理内存。 1. 引用计数:Python中的每个对象都有一个引用计数器,用于记录有多少个引用指向该对象。当引用计数为0时,说明该对象不再被使用,可以被回收。当一个对象被赋值给一个新的变量时,引用计数会增加;当变量被删除或者超出作用域时,引用计数会减少。但是引用计数机制无法解决循环引用的问题。 2. 循环垃圾收集:为了解决循环引用的问题,Python还使用了循环垃圾收集机制。它通过标记-清除算法来检测和回收不再使用的对象。具体过程如下: - 首先,从根对象(如全局变量、活动函数栈等)开始,标记所有可以访问到的对象。 - 然后,清除所有未标记的对象,并回收它们所占用的内存空间。 - 最后,对内存空间进行整理,以便后续分配。 Python垃圾回收机制是自动触发的,当满足一定条件时,垃圾回收器会自动执行垃圾回收操作。这些条件包括: - 当内存达到一定阈值时; - 当对象的引用计数为0时; - 当程序调用了`gc.collect()`函数。 需要注意的是,Python垃圾回收机制是相对慢的,因为它需要遍历整个对象图来进行标记和清除操作。因此,在编写Python程序时,应尽量避免产生大量的临时对象和循环引用,以提高程序的性能

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值