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 ...
随机推荐
- PAT 天梯赛 L2-003. 月饼 【贪心】
题目链接 https://www.patest.cn/contests/gplt/L2-003 思路 用贪心思路 最后注意一下 总售价有可能是浮点数 AC代码 #include <cstdio& ...
- Python 可变长度函数参数
func( *tuple_grp_nonkw_args, **dict_grp_kw_args ) 在编程的过程中,我们可能会遇到函数参数个数不固定的情况.这时就需要使用可变长度的函数参数来实现我们的 ...
- JAVA中最方便的Unicode转换方法
在命令行界面用native2ascii工具 1.将汉字转为Unicode: C:\Program Files\Java\jdk1.5.0_04\bin>native2ascii 测试 ...
- 美团offer
首先说明我是OP岗,RD的可能没有参考意义.本人985渣本一枚,非计算机.网络相关专业.不得不说美团的面试官给我的感觉很好,首先他们都比较极客,都是各个方向的大牛.虽然根据面试流程必须问我一些与我方向 ...
- hbase shell-namespace(命名空间指令)
hbase shell命名空间namespace篇: 1. alter_namespace (一般用于添加删除一个属性,很少使用) hbase(main)::> help 'alter_name ...
- ELK初步指南
ELK的简单科普文章,加入了自己的一些理解. 内容包括ELK的基本介绍, 应用场景, 架构设计, 监控及自监控, 业界进展及推荐资料等. 用户故事 场景一 作为一个运维工程师, 某天虚拟机出现故障, ...
- Spring Cloud之整合ZK作为注册中心
Eureka已经闭源了,用zk可以替代之 Eureka 作为注册中心 Dubbo也是zk作为注册中心的 Zookeeper简介 Zookeeper是一个分布式协调工具,可以实现服务注册与发现.注册中心 ...
- 算法(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)被赋值 ...
- App开发流程之iOS开发证书拾遗
很久没有总结,回头看了一下过期的账号,记录的内容少之又少.最近有一些时间,想好好总结记录一下. 由于很久没有记录,想写的东西很多又很杂,想了一下,一篇一篇罗列知识点和经验,还不如写一个系列,记录一个应 ...
- 使用button的:after伪类选择器内容的跳动
按钮的css样式,想要作个美观一点的按钮,使用:after伪类选择器在按钮后跟随"!!"的符号,但点击按钮时按钮的值内容动,但跟随的"!!"符合不动,这样看起来 ...