python-开放类优化内存性能
开放类:在运行期间,可动态向实例或类添加新成员,方法
1.实例不能添加方法到类,反之可以
class A: pass a = A() a.func = lambda x: x+1 a.func # <function <lambda>> A.func # AttributeError: type object 'A' has no attribute 'func'
2.object类,不能添加任何成员,也没有普通类的__dict__方法
2.1SimpleNamespace简单继承object,其作用用来代替 class X: pass 语句
import types
o = types.SimpleNamespace(a=1,b=2)
print(o.__dict__)
o.c=3
print(o.__dict__) >>>
{'a': 1, 'b': 2}
{'a': 1, 'b': 2, 'c': 3}
3. __slots__类属性,用来处理 内存和性能 问题
对于需要创建海量实例的类来说,可以通过设置__slots__,阻止实例(类依然可以添加方法)创建__dict__等成员。解释器只为__slots__指定的成员分配空间。
class A:
__slots__ = ['x','y'] # only two members
>>>
>>> a = A()
>>> a.x = lambda x:x+1
>>> a.y = 2
>>> print(a.x(3))
>>> print(A.__dict__) # 实例a 没有__dict__属性了
# 结果
4
{'__module__': '__main__', '__slots__': ['x', 'y'], 'x': <member 'x' of 'A' objects>, 'y': <member 'y' of 'A' objects>, '__doc__': None} >>> a.z=3
# AttributeError: 'A' object has no attribute 'z'
继承拥有__slots__属性的类,依然需要指定__slots__为空,或新增某些属性
--------------------------------------------------------------------------------------------
因为__slots__阻止了实例创建__dict__等成员,所以对于需要大量实例化的类来讲,就节约了大量的内存
python-开放类优化内存性能的更多相关文章
- 十条服务器端优化Web性能的技巧
		
服务器 远程桌面连接工具 提高web应用的性能从来没有比现在更重要过.网络经济的比重一直在增长;全球经济超过5%的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其 ...
 - [python]用profile协助程序性能优化
		
转自:http://blog.csdn.net/gzlaiyonghao/article/details/1483728 本文最初发表于恋花蝶的博客http://blog.csdn.net/lanph ...
 - 记一次vue长列表的内存性能分析和优化
		
好久没写东西,博客又长草了,这段时间身心放松了好久,都没什么主题可以写了 上周接到一个需求,优化vue的一个长列表页面,忙活了很久也到尾声了,内存使用和卡顿都做了一点点优化,还算有点收获 写的有点啰嗦 ...
 - Android性能优化-内存优化
		
原文链接 Manage Your App’s Memory 前言 在任何软件开发环境中,RAM都是比较珍贵的资源.在移动操作系统上更是这样,因为它们的物理内存通常受限.尽管在ART和Dalvik虚拟机 ...
 - Qualcomm_Mobile_OpenCL.pdf 翻译-7 内存性能优化
		
内存优化是最重要也是最有效的OpenCL性能优化技术.大量的应用程序是内存限制而不是计算限制.所以,掌握内存优化的方法是OpenCL优化的基础.在这章中,将会回顾OpenCL的内存模型,然后是最优的实 ...
 - 在ASP.NET Core中用HttpClient(四)——提高性能和优化内存
		
到目前为止,我们一直在使用字符串创建请求体,并读取响应的内容.但是我们可以通过使用流提高性能和优化内存.因此,在本文中,我们将学习如何在请求和响应中使用HttpClient流. 什么是流 流是以文件. ...
 - Android性能优化之巧用软引用与弱引用优化内存使用
		
前言: 从事Android开发的同学都知道移动设备的内存使用是非常敏感的话题,今天我们来看下如何使用软引用与弱引用来优化内存使用.下面来理解几个概念. 1.StrongReference(强引用) 强 ...
 - [daily][optimize] 一个小python程序的性能优化 (python类型转换函数引申的性能优化)
		
前天,20161012,到望京面试.第四个职位,终于进了二面.好么,结果人力安排完了面试时间竟然没有通知我,也没有收到短信邀请.如果没有短信邀请门口的保安大哥是不让我进去大厦的.然后,我在11号接到了 ...
 - Citrix 服务器虚拟化之十三 Xenserver虚拟机内存优化与性能监控
		
Citrix 服务器虚拟化之十三 Xenserver虚拟机内存优化与性能监控 XenServer的DMC通过自动调节运行的虚拟机的内存,每个VM分配给指定的最小和最大内存值之间,以保证性能并允许每 ...
 
随机推荐
- [转]Python 模块收集
			
Python 模块收集 转自:http://kuanghy.github.io/2017/04/04/python-modules Python | Apr 4, 2017 | python 工具 a ...
 - RedHat6.5安装zookeeper单机
			
版本号: Redhat6.5 zookeeper-3.4.6 JDK1.8 zookeeper下载 官网下载地址:https://mirrors.tuna.tsinghua.edu.cn/apac ...
 - KC705开发板关于MIG的配置
			
KC705开发板关于MIG的配置
 - QQ检测登陆及QQ协议
			
QQ协议分析及还原 http://blog.csdn.net/qinggebuyao/article/details/7814499 腾讯的网站如何检测到你的 QQ 已经登录? http://blog ...
 - 解决Windows远程桌面连接每次都提示输入密码的问题,远程桌面记不住密码
			
FROM:http://www.veryhuo.com/a/view/80444.html Windows 远程桌面连接几乎每天都用,所以使用的方便性非常重要.如果你经常用,也许会发现在某些系统中,每 ...
 - Azure ARM (15) 根据现有VHD文件,创建ARM VM
			
<Windows Azure Platform 系列文章目录> 在很多时候,我们需要根据现有VHD文件,创建ARM VM.在这里笔者简单介绍一下相关的Azure PowerShell 这里 ...
 - [蓝桥杯]ALGO-16.算法训练_进制转换
			
问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*102+2*101+3*100这样 ...
 - Ubuntu 14.10 下Hadoop 错误集
			
1 FATAL org.apache.hadoop.ha.ZKFailoverController: Unable to start failover controller. Parent znode ...
 - react基础
			
上一篇文章主要是记录了自己是如何创建react项目的,今天则主要是总结一下react中的一个基础入门知识,包括数据定义和绑定.属性绑定.数组循环等等. 组件继承和挂载 当我们使用脚手架或者命令行创建一 ...
 - Spring Boot下Druid连接池+mybatis
			
目前Spring Boot中默认支持的连接池有dbcp,dbcp2, hikari三种连接池. 引言: 在Spring Boot下默认提供了若干种可用的连接池,Druid来自于阿里系的一个开源连 ...