python的WeakKeyDictionary类和weakref模块的其他函数

# -*- coding: utf-8 -*-
# @Author : ydf
# @Time : 2019/6/13 13:18
import time
import weakref
from app.utils_ydf import nb_print
class A():
def __init__(self,x):
self._x = x def __repr__(self):
return f'A类的{self._x}实例 {id(self)}' def __del__(self):
nb_print(f'摧毁啦 {self._x} 。。。。') wd = dict()
# wd = weakref.WeakKeyDictionary() a1 = A(1)
a2 = A(2) wd[a1] = 'xxxxxxx'
wd[a2] = 'yyyyyyy' nb_print('销毁a1对象前')
for item in wd.items():
nb_print(item) del a1
nb_print('销毁a1对象后')
for item in wd.items():
nb_print(item) while 1:
time.sleep(10) # 阻止退出触发del,导致不方便观察

使用普通dict

使用 weakref.WeakKeyDictionary对比使用普通字典,可以看到不同的地方是销毁a1后,普通字典中还有a1这个键,并且del a1时 无法触发A类的__del__方法,。

除此之外还有weakvaluedictionary和weakset这些对象。

weakref里面的函数。

class TestObj:
def __init__(self):
self.xx = 666 def test_func(reference):
nb_print('Hello from Callback function!') nb_print(reference, 'This weak reference is no longer valid') t = TestObj() # 建立一个a的弱引用
nb_print(t.xx)
t_ref = weakref.ref(t, test_func)
nb_print(t_ref().xx)
t.xx = 777
nb_print(t_ref().xx) del t
nb_print(t_ref().xx) # 可以发现用不了了。

python的WeakKeyDictionary类和weakref模块的其他函数的更多相关文章

  1. python中的类的成员变量以及property函数

    1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用“类.”来引用. 1.3 实例变量 ...

  2. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  3. 【Python基础】lpthw - Exercise 40 模块、类和对象

    一. 模块(module) 模块中包含一些函数和变量,在其他程序中使用该模块的内容时,需要先将模块import进去,再使用.操作符获取函数或变量,如 # This goes in mystuff.py ...

  4. python学习笔记之九:模块和包

    Python的标准安装包括一组模块,称为标准库.这里介绍模块的工作方式,学习如何使用它们. 一. 模块 1.1 用import从外部模块获取函数并为自己的程序所用: >>> from ...

  5. Python黑帽编程2.6 模块

    Python黑帽编程2.6 模块 我们已经学习了如何在你的程序中定义一次函数而重用代码.如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块.模块基本上就是一个 ...

  6. [转]Python 命令行参数和getopt模块详解

    FROM : http://www.tuicool.com/articles/jaqQvq 有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Pyt ...

  7. python学习笔记-(九)模块

    基础知识 1. 定义 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑----实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块就是test) 包:用 ...

  8. Python + OpenCV2 系列:3 - python 字符串,类,编码规范

    首先,强烈推荐<<简明 Python 教程>> Swaroop, C. H. 著 沈洁元 译 其实,这本书里已经把python的最基本的用法,编码等等介绍的很好,这里把我用到的 ...

  9. Python 命令行参数和getopt模块详解

    有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...

随机推荐

  1. PAT 天梯赛 L2-003. 月饼 【贪心】

    题目链接 https://www.patest.cn/contests/gplt/L2-003 思路 用贪心思路 最后注意一下 总售价有可能是浮点数 AC代码 #include <cstdio& ...

  2. Python 可变长度函数参数

    func( *tuple_grp_nonkw_args, **dict_grp_kw_args ) 在编程的过程中,我们可能会遇到函数参数个数不固定的情况.这时就需要使用可变长度的函数参数来实现我们的 ...

  3. JAVA中最方便的Unicode转换方法

    在命令行界面用native2ascii工具  1.将汉字转为Unicode:  C:\Program   Files\Java\jdk1.5.0_04\bin>native2ascii  测试 ...

  4. 美团offer

    首先说明我是OP岗,RD的可能没有参考意义.本人985渣本一枚,非计算机.网络相关专业.不得不说美团的面试官给我的感觉很好,首先他们都比较极客,都是各个方向的大牛.虽然根据面试流程必须问我一些与我方向 ...

  5. hbase shell-namespace(命名空间指令)

    hbase shell命名空间namespace篇: 1. alter_namespace (一般用于添加删除一个属性,很少使用) hbase(main)::> help 'alter_name ...

  6. ELK初步指南

    ELK的简单科普文章,加入了自己的一些理解. 内容包括ELK的基本介绍, 应用场景, 架构设计, 监控及自监控, 业界进展及推荐资料等. 用户故事 场景一 作为一个运维工程师, 某天虚拟机出现故障, ...

  7. Spring Cloud之整合ZK作为注册中心

    Eureka已经闭源了,用zk可以替代之 Eureka 作为注册中心 Dubbo也是zk作为注册中心的 Zookeeper简介 Zookeeper是一个分布式协调工具,可以实现服务注册与发现.注册中心 ...

  8. 算法(Algorithms)第4版 练习 1.5.8

    假设原id数组: 0 1 1 4 4 8 6 1 8 0 输入p = 5, q = 7 则输出结果会出错,最终为: 0 1 1 4 4 1 6 1 8 0 因为当id[p](id[5] = 8)被赋值 ...

  9. App开发流程之iOS开发证书拾遗

    很久没有总结,回头看了一下过期的账号,记录的内容少之又少.最近有一些时间,想好好总结记录一下. 由于很久没有记录,想写的东西很多又很杂,想了一下,一篇一篇罗列知识点和经验,还不如写一个系列,记录一个应 ...

  10. 使用button的:after伪类选择器内容的跳动

    按钮的css样式,想要作个美观一点的按钮,使用:after伪类选择器在按钮后跟随"!!"的符号,但点击按钮时按钮的值内容动,但跟随的"!!"符合不动,这样看起来 ...