你写的 Python 代码可以更“瘦”
>>> x = ob['x']
>>> ob['y'] = y
240
实例数
|
对象大小
|
1 000 000
|
240 Mb
|
10 000 000
|
2.40 Gb
|
100 000 000
|
24 Gb
|
#
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
>>> ob = Point(1,2,3)
>>> x = ob.x
>>> ob.y = y
字段
|
大小(比特)
|
PyGC_Head
|
24
|
PyObject_HEAD
|
16
|
__weakref__
|
8
|
__dict__
|
8
|
合计:
|
56
|
56 112
实例数
|
大小
|
1 000 000
|
168 Mb
|
10 000 000
|
1.68 Gb
|
100 000 000
|
16.8 Gb
|
__slots__ = 'x', 'y', 'z'
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
>>> ob = Point(1,2,3)
>>> print(sys.getsizeof(ob))
64
字段
|
大小(比特)
|
PyGC_Head
|
24
|
PyObject_HEAD
|
16
|
x
|
8
|
y
|
8
|
z
|
8
|
总计:
|
64
|
实例数
|
大小
|
1 000 000
|
64 Mb
|
10 000 000
|
640 Mb
|
100 000 000
|
6.4 Gb
|
mappingproxy(
....................................
'x': <member 'x' of 'Point' objects>,
'y': <member 'y' of 'Point' objects>,
'z': <member 'z' of 'Point' objects>})
>>> x = ob[0]
>>> ob[1] = y # ERROR
72
字段
|
大小(字节)
|
PyGC_Head
|
24
|
PyObject_HEAD
|
16
|
ob_size
|
8
|
[0]
|
8
|
[1]
|
8
|
[2]
|
8
|
总计:
|
72
|
#
@property
def _get_x(self):
return self[0]
@property
def _get_y(self):
return self[1]
@property
def _get_z(self):
return self[2]
#
def __new__(cls, x, y, z):
return tuple.__new__(cls, (x, y, z))
实例数
|
大小
|
1 000 000
|
72 Mb
|
10 000 000
|
720 Mb
|
100 000 000
|
7.2 Gb
|
记录类:不带循环 GC 的可变更命名元组
>>> ob = Point(1, 2, 3)
字段
|
大小(字节)
|
PyObject_HEAD
|
16
|
ob_size
|
8
|
x
|
8
|
y
|
8
|
z
|
8
|
总计:
|
48
|
实例数
|
大小
|
1 000 000
|
48 Mb
|
10 000 000
|
480 Mb
|
100 000 000
|
4.8 Gb
|
x:int
y:int
z:int
字段
|
大小(字节)
|
PyObject_HEAD
|
16
|
ob_size
|
8
|
x
|
8
|
y
|
8
|
z
|
8
|
总计:
|
48
|
>>> print(sys.getsizeof(ob))
40
.......................................
'x': <recordclass.dataobject.dataslotgetset at 0x7f203c55c690>,
'y': <recordclass.dataobject.dataslotgetset at 0x7f203c55c670>,
'z': <recordclass.dataobject.dataslotgetset at 0x7f203c55c410>})
实例数
|
大小
|
1 000 000
|
40 Mb
|
10 000 000
|
400 Mb
|
100 000 000
|
4.0 Gb
|
cdef public int x, y, z
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
>>> print(sys.getsizeof(ob))
32
字段
|
大小(字节)
|
PyObject_HEAD
|
16
|
x
|
4
|
y
|
4
|
z
|
4
|
nycto
|
4
|
总计:
|
32
|
实例数
|
大小
|
1 000 000
|
32 Mb
|
10 000 000
|
320 Mb
|
100 000 000
|
3.2 Gb
|
实例数
|
大小
|
1 000 000
|
12 Mb
|
10 000 000
|
120 Mb
|
100 000 000
|
1.2 Gb
|
68
扫码 1 秒即可关注哦~
你写的 Python 代码可以更“瘦”相关推荐
- 多元线性回归算法python实现_手写算法-Python代码推广多元线性回归
1.梯度下降-矩阵形式 上篇文章介绍了一元线性回归,包括Python实现和sklearn实现的实例.对比,以及一些问题点,详情可以看这里: 链接: 手写算法-Python代码实现一元线性回归 里面封装 ...
- python函数的组成要素_python函数要素有哪些?这7点是你写好python代码的关键
[摘要]对于python小白来说,写好一个python代码并不容易,不过你知道python函数要素有哪些?这7点是你写好python代码的关键,如果你想学好python,那么本文内容一定要自己试试,毕 ...
- 手写算法-python代码实现Ridge(L2正则项)回归
手写算法-python代码实现Ridge回归 Ridge简介 Ridge回归分析与python代码实现 方法一:梯度下降法求解Ridge回归参数 方法二:标准方程法实现Ridge回归 调用sklear ...
- python实现tomasulo算法_手写算法-python代码实现KNN
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 原理解析 KNN-全称K-Nearest Neighbor,最近邻算法,可以做分类任务,也可以做回归 ...
- python程序写完后点哪个运行快_让 Python 代码运行更快的最佳方式!
PyPy与CPython PyPy是Python解释器CPython的直接替代品.CPython将Python编译为中间字节码然后由虚拟机解释,而PyPy使用实时(JIT)编译将Python代码转换为 ...
- 写好 Python 代码的几条原则
程序设计的好与坏,早在我们青葱岁月时就接触过了,只是那是并不知道这竟如此重要.能够立即改善程序设计.写出"好"代码的知识有以下几点: •面向对象五个基本原则: •常见的三种架构: ...
- 一个让Python代码运行更快的最佳方式!
作者 | Serdar Yegulalp 译者 | 姜松浩,责编 | 屠敏 转载自 CSDN(ID:CSDNnews) Python因其强大.灵活且易于使用等特性,而赢得了声誉.这些优点使其在各种各样 ...
- 你写的Python代码规范吗?
总第141篇/张俊红 1.什么是PEP8 PEP 是 Python Enhancement Proposals 的缩写,直译过来就是「Python增强建议书」也可叫做「Python改进建议书」,说的直 ...
- python多元非线性拟合csdn_手写算法-Python代码实现非线性回归
生成非线性数据集 前面我们介绍了Python代码实现线性回归,今天,我们来聊一聊当数据呈现非线性时,这时我们继续用线性表达式去拟合,显然效果会很差,那我们该怎么处理?继续上实例(我们的代码里用到的数据 ...
最新文章
- IBM HACMP 系列 -- 后期安装工作和管理任务二
- 如何解决Bluetooth系统设计的棘手问题
- 使用HtmlAgilityPack抓取网页数据
- 【机器视觉学习笔记】伽马变换(C++)
- JS-节点增删改-document-HTML DOM-事件
- 外点罚函数matlab程序_关于图像轮廓识别的程序实现
- 做技术的你,如果别人找你创业,该怎么办?
- Office 2007,在编辑Word时,文件经常无法保存会丢失
- installshield中用release wizard打包.net framework 1.1中文版
- python大作业 课设
- 发票专用驱动sjz_增值税发票选择确认平台使用手册
- 怎么用计算机按log以2为底,log以2为底4的对数在计算器上怎么按?
- Linux之shell脚本编程、多命令、脚本、bc计算器、反引号、if语句、for语句
- D. Relatively Prime Graph(构造+数论)
- JVM-内存区域 堆、方法区,虚拟机栈、程序计数器详解
- 手机键盘(简单模拟)
- c++ 堆优化版dijkstra 代码实现
- mysql计算某个两个时间的差值
- 8.显卡芯片厂家及芯片命名规则-ATI、NVIDIA
- ORA-65096: 公用用户名或角色名无效
热门文章
- 使用git建立远程仓库,让别人git clone下来
- Elasticsearch和MongoDB对比
- MySQL中空字符串与null的区别:计数 判断 时间
- html 表格_UiPath之发送正文包含表格的邮件(通过Html实现表格)
- oc语言和c语言,C语言及OC语言初期学习心得
- html缓存在本地缓存,HTML5 本地缓存 window.localStorage
- 成田机场坐access到品川_@马大哈们:北京有三座机场了,以后订票别选错哦!大兴机场今试飞...
- 泛型方法的定义和使用_泛型( Generic )
- python读写excel模块pandas_Python3使用pandas模块读写excel操作示例
- 遥感计算机分类实验的难点,8-遥感实验.doc