Python进阶系列三— 数据结构和存储优化
数据结构
在实际开发中,我们经常会使用一个类来表示一个对象,从数据库从取出数据之后需要保存在具体的数据结构中进行处理。我们可以使用元组,字典和类进行存储。
元组tuple
我们将取出的数据保存在一个元组内,例如有一个数据类型(str, int, float)的表,我们读出数据之后保存在元组当中。
问题在于,元组保存只能通过下标访问原始数据,需要记住属性的位置才能访问,不是很容易理解。
我们同样读取一段csv文件,观察不同数据结构保存下所用的内存大小和峰值大小。我们使用列表保存所有不同的数据结构。
Memory Use: Current 128447442, Peak 128481645
字典dict
将取出的数据保存在一个字典当中,按照每一列的属性值为键,对应的数值为值保存起来。
Memory Use: Current 220856250, Peak 220890453
可以看到字典保存的方式占的空间几乎翻倍,需要更多的空间来保持键值对映射。
命名元组namedtuple
因为元组通过下标访问的方式不是很容易理解,字典的空间开销太大,因此python目前有一种称为命名元组nametuple的数据结构,他是python内置库collections里的一个数据结构。
from collections import namedtuple
Row = namedtuple('Row',('route','date','daytype','rides'))
使用Row保存数据结构,再次检测保存所有的数据所需要的内存空间大小。
Memory Use: Current 133068434, Peak 133102637
内存大小仅比tuple大了3%,但是能够实现通过属性名访问的功能。
类class
class Row:
def __init__(self, route, date, daytype, rides):
self.route = route
self.date = date
self.daytype = daytype
self.rides = rides
用类来接收数据并保存是大部分语言中使用的方法,Java里规范的方法就是为所有的数据集合建立一个类。
Memory Use: Current 179272954, Peak 179307157
但是我们发现用类保存所使用的空间反而更大了,还不如nametuple,因为类的底层使用字典来保存数据,这里我们可以使用slot方法来设置类的属性。
slot优化类
在Python中,slots是一个特殊的属性,用于限制类的实例可以拥有的属性。通过在类中定义__slots__,可以指定哪些属性可以存在于类的实例中,从而限制了实例可以动态添加的属性数量,提供了一些性能和内存优化的可能性。
在Python中,每个实例的属性都存储在一个字典中,这会消耗一定的内存。通过使用 __slots__,可以减少每个实例所需的内存开销,因为不再需要额外的字典来存储属性。
class Row:
__slots__ = ('route', 'date', 'daytype', 'rides')
def __init__(self, route, date, daytype, rides):
self.route = route
self.date = date
self.daytype = daytype
self.rides = rides
使用slot定义数据之后,所占的内存空间大小为:
Memory Use: Current 123827482, Peak 123861685
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiahkcb
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22