__slots__用法以及优化
其实也是无意之中又看到这个东西,这次索性再记一下,免得下次忘记又再看一遍,往复循环浪费了太多时间。
__slots__其实我做项目这么久还没有主动使用过。下面reference有提到这么一句话
Warning: Don’t prematurely optimize and use this everywhere! It’s not great for code maintenance, and it really only saves you when you have thousands of instances.
不要过早优化和到处使用。这会让代码变得难以维护,所以当你真的存储好几千实例的时候再来考虑这个问题吧。
跟下面进入正题 介绍一下__slots__
在申明了__slots__的类里面将不会再有__dict__和__weakref__魔法方法的存在了。我们申明在对象和类中的属性,其实都是存储在__dict__之中的。砍掉了__dict__相当于砍掉了一坨存储字典对象的容器,而且在初始化新类对象的时候,新的对象也不会再有__dict__方法,这样将大大节约一批内存的使用。下面reference节省内存的文章实际上就是通过固定类对象可以使用的属性,砍掉__dict__从而达到节省内存的目的(前提是你真的会实例化成千上万个该对象,比方说user对象之类)。 使用__slots__也有不好的地方,降低了代码的维护性和灵活性,无法再让动态语言的灵活性得到充分展现。
另外__slots__方法不会影响property装饰器装饰的属性。 调用函数也不会受到影响。
class T(object):
# __slots__ = ['name', 'pp', 'l', '__dict__'] def __init__(self):
self.name = 'ahhaa'
self.pp = 'qweqwe'
self.l = 'asdasd' def bb(self):
return 'oy you remember that' @property
def gg(self):
return 'nimei' print T.__dict__
print T().gg
Reference:
http://tech.oyster.com/save-ram-with-python-slots/ Saving 9 GB of RAM with Python’s __slots__
__slots__用法以及优化的更多相关文章
- mysql的limit经典用法及优化
用法一 SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiserid='59') LIMIT 2 OFFSET 1; 比如这个 ...
- MySQL的limit用法及优化(转)
常规用法: 用法一: OFFSET ; 比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取. 用法二: ,; 而这个SQL,limit后面是从第2条开始读,读取1条信息 ...
- Postgresql基本用法以及优化注意
本篇为之前学习PG数据库一些基本操作使用以及优化注意. 比较运算符 = : <>,!=,<= , <,>=,>: 不能用于null判断; Between: Le ...
- __slots__用法
class Test(object): __slots__ = ("name","age") t = Test() t.name = "老王" ...
- Mysql中Join用法及优化
Join的几种类型 笛卡尔积(交叉连接) 如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录.在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者直接用f ...
- Python如何动态的为对象添加方法或属性,__slots__用法
代码示例如下: import types #使用MethodType方法需要导入包 class test(object): #定义 一个test类,包含name属性和f()方法 def __i ...
- SQL里IN的用法以及优化
1.in后条件不多,可以考虑主表建索引,或用union all 代替 2. in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查 ...
- mysql中event的用法详解
一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...
- php分享二十:mysql优化
1:垂直分割 示例一:在Users表中有一个字段是家庭地址,这个字段是可选字段,相比起,而且你在数据库操作的时候除了个人信息外,你并不需要经常读取或是改写这个字段.那么,为什么不把他放到另外一张表中呢 ...
随机推荐
- Linux下rz/sz安装及使用方法
新搞的云服务器用SecureCRT不支持上传和下载,没有找到rz命令.记录一下如何安装rz/sz命令的方法. 一.工具说明 在SecureCRT这样的ssh登录软件里, 通过在Linux界面里输入rz ...
- matlab slice
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- linux公钥和私钥生成
1. 路径 cd /root/.ssh 2. 输入命令 ssh-keygen -t rsa 按三次回车 3. 会依次生成 id_rsa 私钥和 id_rsa.pub 公钥 [root@insure ...
- AI 判别式模型和生成式模型
判别式模型(discriminative model) 生成式模型(generative model) 对于输入x,类别标签y:产生式模型估计它们的联合概率分布P(x,y)判别式模型估计条件概率分布P ...
- ubuntu install pip
ubuntu 安装pip sudo apt-get update sudo apt-get upgrade sudo apt-get install python-pip
- stream classdesc serialVersionUID = -7218828885279815404, local class serialVersionUID = 1.
序列化类时出现的异常! 当某一个类实现java.io.Serializable接口时,该类默认会生成一个private static final long serialVersionUID = 1L; ...
- 在TerraExplorer中如何批量根据shape多边形对象创建TerrainModify对象?
其实,在Skyline中TerrainModify对象就是一个特殊类型Polygon对象,他们的Geometry是可以直接交换使用的: <!DOCTYPE html PUBLIC "- ...
- Android popupMenu
popupMenu = new PopupMenu(ActivityHousesNumList.this, imageViewhousesnum1); popupMenu.getMenuInflate ...
- Luogu1979 NOIP2013D2T3 华容道 搜索、最短路
题目传送门 题意:给出一个$N \times M$的棋盘,棋盘上有一些块可以移动,有一些块无法移动.$Q$次询问,每一次询问给出三个块$a,b,c$,将$a$块变为空格,空格旁边可移动的块可以与空格交 ...
- WPF-利用Blend写的平面控制闸门开关动画
原文:WPF-利用Blend写的平面控制闸门开关动画 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/de ...