python核心-面向对象-python对象的生命周期,以及周期方法

news2024/11/17 11:28:27

 

 监听对象的生命周期

 

# -----------------------------几个监听对象生命周期的方法----------------------
# class Person:
#     # def __new__(cls, *args, **kwargs):
#     #     print("新建一个对象,但是被我拦截了")
#     def __init__(self):
#         print("初始化方法")
#         self.name = "sz"
#
#     def __del__(self):
#         print("这个对象被释放了")
# p = Person()
# print(p)
# print(p.name)


# --------------------------监听对象生命周期的方法-小案例-------------------------

# Person, 打印一下,当前这个时刻,由Person类,产生的实例,有多少个
# 创建了一个实例,计数+1,删除一个实例,计数 -1



class Person:
    __personCount = 0

    def __init__(self):
        print("计数 + 1")
        Person.__personCount += 1

    def __del__(self):
        print("计数 - 1")
        self.__class__.__personCount -= 1

    # @staticmethod
    # def log():
    #     print("当前的人的个数是%d个" % Person.__personCount)

    @classmethod
    def log(cls):
        print("当前的人的个数是%d个" % cls.__personCount)

p = Person()
p2 = Person()

Person.log()
del p

Person.log()

 内存管理机制

class Person:
    pass

p = Person()
# print(p)
# print(id(p))
# print(hex(id(p)))

p2 = Person()

print(id(p), id(p2))

 

# -----------------------引用计数器-------------------------------------

import   sys

class Person:
    pass

p1 = Person()
print(sys.getrefcount(p1))
p2 = p1
print(sys.getrefcount(p1))

del p2
del p1

# ---------------------------引用计数器 +1 -1 的场景举例

import sys
class Person:
    pass

p = Person() #1

print(sys.getrefcount(p))

# def log(obj):
#     print(sys.getrefcount(obj))

# log(p)

l = [p]
print(sys.getrefcount(p))
# -----------------------引用计数器机制-特殊场景-循环应用问题------------------------

# 内存管理机制 = 引用计数器机制 + 垃圾回收机制
# 当一个对象,如果被引用 + 1,删除一个引用:-1    0:自动释放

# 循环引用
# objgraph.count 可以查看垃圾回收器,跟踪的对象个数

import objgraph

class Person:
    pass
class Dog:
    pass

p = Person()
d = Dog()

print(objgraph.count("Person"))
print(objgraph.count("Dog"))

p.pet = d
p.master = p
del p
del d
print(objgraph.count("Person"))
print(objgraph.count("Dog"))

垃圾回收机制

 

import gc
print(gc.get_threshold())

gc.set_threshold(200, 5, 5)
print(gc.get_threshold())

#---------------------垃圾回收机制-触发时机-------------------------------

# import gc
# gc.disable()
# print(gc.isenabled())
# gc.enable()
# print(gc.isenabled())
#
# print(gc.get_threshold())


# 手动回收
import objgraph
import gc
class Person:
    pass
class Dog:
    pass

p = Person()
d = Dog()

p.pet = d
d.master = p

del p
del d

gc.collect()

print(objgraph.count("Person"))
print(objgraph.count("Dog"))

 

# ------------循环引用-细节问题(版本兼容方案)------------------------
import objgraph
import gc
import weakref
# 1.定义了两个类
class Person:
    def __del__(self):
        print("Person对象,被释放了")
    pass
class Dog:
    def __del__(self):
        print("Dog对象,被释放了")
    pass

# 2.根据这两个类,创建出两个实例
p = Person()
d = Dog()

# 3.让两个实例对象之间相互引用,造成循环
# p.pet = d
p.pets = {"dog": weakref.ref(d1), "cat": weakref.ref(c1)}
weakref.WeakValueDictionary({"dog": d1, "cat":c1})
# d.master = weakref.ref(p)
d.master = p
# 4.尝试删除可到达引用之后,测试真实对是否又被回收
p.pet = None
del p
del d
# 5.通过"引用计数机制"无法回收,需要借助"垃圾回收机制"进行回收
# gc.collect()

print(objgraph.count("Person"))
print(objgraph.count("Dog"))

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring-ApplictionContext

Spring Spring是整个Java体系最核心的框架,没有之一。 核心类图结构 ApplicationContext ApplicationEventPublisher:提供了一种机制,用于通知应用程序中感兴趣的部分有关其执行过程中发生的特定事件。ListableBeanFactory:是S…

vue新学习 02 vue命令v-model,数据代理,事件,监听,渲染

双向绑定用命令v-model: v-bind的命令是单项去绑定data中的相关属性,此时的data是真正的data,并没有用变量声明的方式去接收vue实例对象,也就是例如用const vm new Vue({})。而是直接就采用了new Vue({})这…

【DP】The 2022 ICPC Asia Regionals Online Contest (II) B Non-decreasing Array

PTA | 程序设计类实验辅助教学平台 题意: 给定一个不下降的序列,每次操作有两步: 1.选择2~N的一个数,删除这个数 2.选择2~N的一个数,改变这个数为任意值 要满足该数列不下降,N-2次询问,问操…

《玉骨遥》:腾讯视频定义古偶叙事及格线

(图片来源于网络,侵删) 文 | 螳螂观察 作者 | 郭襄 拿着自带话题与流量的古偶仙侠剧《玉骨遥》,腾讯视频着实做了一回暑期档的“显眼包”。 对于长视频平台来说,暑期档是兵家必争之地。但在一众竞争者中&#xff0…

3.操作元素内容

3.1元素innerText属性 ➢将文本内容 添加/更新到任意标签位置 ➢显示纯文本&#xff0c;不解析标签 【例如】 <body><div class"box">文字内容</div><script>// 1.获取元素const box document.querySelector(.box)// 2.修改文字内容 对象…

完全背包--动态规划

一)模板题:完全背包 【模板】完全背包_牛客题霸_牛客网 (nowcoder.com) 第一问: 一)定义一个状态表示: dp[i][j]表示从前i个物品中选&#xff0c;总体积不超过j&#xff0c;所有选法中&#xff0c;最大的价值 二)根据状态标识推到状态转移方程:根据最后一个位置的状态来划分问…

配置tomcat内存大小(windows、linux)

一、参数说明 -Xms&#xff1a; JVM初始分配的堆内存 -Xmx&#xff1a; JVM最大允许分配的堆内存&#xff0c;按需分配 -XX:PermSize&#xff1a; JVM初始分配的非堆内存 -XX:MaxPermSize&#xff1a; JVM最…

华为openGauss数据库入门 - gsql用法

目录 1.1 gsql的语法 1.2 gsql常用选项 1.2.1 最常用的必要选项 1.2.2 -r选项 1.2.3 -E选项 1.2.4 -t选项 1.2.5 -A选项 1.2.6 -v选项 1.2.7 -c选项 1.2.8 -f选项 1.2.9 -q选项 1.3 gsql的元命令 1.3.1 \l命令 1.3.2 \du命令和\dg命令 1.3.3 \db命令 1.3.4 \d…

flask部署钉钉机器人和企业微信机器人

引言 创建机器人&#xff0c;目的是通过机器人的方式&#xff0c;提出用户的问题&#xff0c;得到想要的回答 钉钉机器人 首先我们需要获取钉钉的企业内部开发者权限然后我们进入钉钉开放平台,登陆后&#xff0c;选择应用开发->机器人->创建应用&#xff0c;我创建了一…

用HTML写一个简单的静态购物网站

实现代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>购物网站</title> &l…

如何判断直线导轨的质量?

直线导轨是机械行业中的重要传动零部件&#xff0c;随着科技3.0时代的到来&#xff0c;直线导轨的需求量也在不断的增加&#xff0c;目前市面上直线导轨的品牌有很多&#xff0c;质量也是良莠不济&#xff0c;那么&#xff0c;我们应该怎样才能挑选到质量好的直线导轨呢&#x…

Python - OpenCV实现摄像头人脸识别(亲测版)

要使用Python 3和OpenCV进行摄像头人脸识别&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1.安装OpenCV库 在命令行中输入以下命令&#xff1a; pip install opencv-python2.准备人脸检测器 使用OpenCV的人脸检测器可以检测出图像中的人脸。在Python中&#xff0c;您…

十一章:Weakly-Supervised Semantic Segmentation Network —— 基于深度种子区域增长的弱监督语义分割网络

0.摘要 本文研究了只使用图像级别标签作为监督来学习图像语义分割网络的问题&#xff0c;这是重要的&#xff0c;因为它可以显著减少人工标注的工作量。最近在这个问题上的最新方法首先使用深度分类网络推断出每个对象类的稀疏和有区别的区域&#xff0c;然后使用有区别的区域作…

const int * p,int const *p, int * const p, const int *const p 搞不清楚?

一、废话不多说&#xff0c;直接来结论 变量含义const int *p 指针p可以修改&#xff0c;*p不可修改int const *p 指针p可以修改&#xff0c;*p不可修改int *const p指针p不可以修改&#xff0c;*p可以修改const int * const p指针p不可以修改&#xff0c;*p不可以修改 显…

黑客学习手册(自学网络安全)

一、首先&#xff0c;什么是黑客&#xff1f; 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手&#xff0c;现阶段黑客所需要掌握的远远不止这些。 二、为什么要学习黑客技术&#xff1f; 其实&#xff0c;网络信息空间安全已经成为海陆空之外的第四大战场&#xff0c;除了国…

MES中的EAP有什么作用?

在现代制造业中&#xff0c;MES&#xff08;Manufacturing Execution System&#xff09;是一个关键的生产管理系统&#xff0c;用于监控、控制和优化制造过程。而EAP&#xff08;Equipment Automation Program&#xff09;作为MES的重要组成部分之一&#xff0c;在生产线上发挥…

DL优化器精简总结 | SGD, Momentum, AdaGrad, Rmsprop, Adam, AdamW

&#x1f525; DL里的优化器相关考点&#xff0c;面试时面试官偶尔会问甚至变态点的会叫代码手撕&#xff0c;笔试选择题只要跟DL相关基本必考。废话不多说&#xff0c;直接上&#xff01; &#x1f604; 当然并不是纯为了面试&#xff0c;只不过说你如果是搞DL的连优化器都说…

性能测试QPS+TPS+事务基础知识分析

本篇文章是性能测试基础篇&#xff0c;主要介绍了性能测试中对QPSTPS事务的基础知识分析&#xff0c;有需要的朋友可以借鉴参考下&#xff0c;希望可以对广大读者有所帮助 事务 就是用户某一步或几步操作的集合。不过&#xff0c;我们要保证它有一个完整意义。比如用户对某一个…

#P1009. [NOIP2016提高组] 玩具小人

题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业。 有一天, 这些玩具小人把小南的眼镜藏了起来。 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时 singer 告诉小南一个谜題: “眼镜藏在我左数第 33 个玩具小人的右数第 11 个玩具小人的…

CMU 15-445 -- Database Recovery - 18

CMU 15-445 -- Database Recovery - 18 引言ARIESLog Sequence NumbersNormal ExecutionTransaction CommitTransaction AbortCompensation Log Records Non-fuzzy & fuzzy CheckpointsSlightly Better CheckpointsFuzzy Checkpoints ARIES - Recovery PhasesAnalysis Phas…