python的WeakKeyDictionary类和weakref模块的其他函数
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模块的其他函数的更多相关文章
- python中的类的成员变量以及property函数
1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用“类.”来引用. 1.3 实例变量 ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- 【Python基础】lpthw - Exercise 40 模块、类和对象
一. 模块(module) 模块中包含一些函数和变量,在其他程序中使用该模块的内容时,需要先将模块import进去,再使用.操作符获取函数或变量,如 # This goes in mystuff.py ...
- python学习笔记之九:模块和包
Python的标准安装包括一组模块,称为标准库.这里介绍模块的工作方式,学习如何使用它们. 一. 模块 1.1 用import从外部模块获取函数并为自己的程序所用: >>> from ...
- Python黑帽编程2.6 模块
Python黑帽编程2.6 模块 我们已经学习了如何在你的程序中定义一次函数而重用代码.如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块.模块基本上就是一个 ...
- [转]Python 命令行参数和getopt模块详解
FROM : http://www.tuicool.com/articles/jaqQvq 有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Pyt ...
- python学习笔记-(九)模块
基础知识 1. 定义 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑----实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块就是test) 包:用 ...
- Python + OpenCV2 系列:3 - python 字符串,类,编码规范
首先,强烈推荐<<简明 Python 教程>> Swaroop, C. H. 著 沈洁元 译 其实,这本书里已经把python的最基本的用法,编码等等介绍的很好,这里把我用到的 ...
- Python 命令行参数和getopt模块详解
有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...
随机推荐
- Android 部分机型在三星S3上面出现了,sqlite莫名其名的锁住的问题
今天在使用安卓三星S3开发时.发现数据库老是锁住,其它机型并未出现锁住的问题,查看数据库所在的目录发现,和db文件同名的多出了一个文件以-journal结尾的莫名其妙的文件,怀疑是这个导致的所以在程序 ...
- CentOS iSCSI服务器搭建------LUN篇
先上服务器信息(你懂得) [root@node ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@node ~]# uname ...
- 纪念下自学QT 第十天 终于写成了串口调试助手
- 第11条:用zip函数同时遍历两个迭代器
核心知识点: (1)内置的zip函数可以平行地遍历多个迭代器. (2)python3中地zip相当于生成器,会在遍历过程中逐次产生元祖.而python2中地zip则是直接把这些元祖完全生成好,并一次性 ...
- TF linear regression
本文的作者 Nishant Shukla 为加州大学洛杉矶分校的机器视觉研究者,从事研究机器人机器学习技术.Nishant Shukla 一直以来兼任 Microsoft.Facebook 和 Fou ...
- [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 【BZOJ4361】isn
题目 [BZOJ4361]isn 做法 \(dp_{i,j}\)表示以\(i\)结尾\(j\)长度,树状数组\(tree_{i,j}\)表长度为\(i\),以\(<=j\)结尾的个数,显然\(d ...
- 第七篇、os、sys、random、time、datetime、logging
一.sys 用于提供对Python解释器相关的操作: 1 2 3 4 5 6 7 8 9 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) ...
- JavaScript的Function 类型
一,Function定义 Function实际上是对象,与其他引用类型一样具有属性和方法.Function可以通过三种方法进行定义,分别是函数声明语法定义,函数表达式定义和Function构造函数定义 ...
- 常用JQuery设置HTML元素内容
主要内容: 一.获取内容及属性 二.设置内容及属性 三.添加元素 四.删除元素 五.css()方法 六.寻找祖先及后代 一.获取内容及属性 二.设置内容及属性 相对于获取内容及属性的方式,只需在函数内 ...