`

python获取对象大小

阅读更多

 

今天在做memcache优化时,想对memcache中插入的数据做压缩,但memcache在做数据压缩时,在一定的大小内做压缩反而适得其反,顾想做一个实验,来查找多大的数据比较好!

 

1. 首先,需要知道所要压缩的数据的大小,这时我们就需要一些python函数来做处理,在C中可以通过sizeof来确定对象的大小,在python中,如何来确定呢?

 

对于一般的数字类型及字符串,可以通过sys.getsizeof(xxx)来获取,如下:

 

#!/usr/bin/env python
#coding:utf-8
#filename:objectsize.py

'''
author:	gavingeng
date:	2012-02-16 22:46:56 
'''

import sys

class A():
	pass

class B(object):
	def __init__(self,id):
		self.id=id

class B1(B):
	pass

class C:
	x=0

class C1(object):
	x=0

def d():
	pass

def e(x=None):
	pass

def foo(x):
	x=9

def main():
	for obj in [1,2**31,2**50,1.9,None,True,'haha','',u'',u'haha',u'11',(),(1,),(1,2),{},{'1':'1'},dict(zip(range(5),range(5))),object,A,A(),B,B(1),B1,B1(7),C,C(),C1,C1(),d,e,foo]:
		print obj,sys.getsizeof(obj)	

if __name__=='__main__':
	main()

 

结果如下:

 

1 12
2147483648 18
1125899906842624 20
1.9 16
None 8
True 12
haha 25
 21
 28
haha 44
11 36
() 24
(1,) 28
(1, 2) 32
{} 136
{'1': '1'} 136
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4} 136
<type 'object'> 436
__main__.A 48
<__main__.A instance at 0xb7805fec> 32
<class '__main__.B'> 448
<__main__.B object at 0xb780802c> 28
<class '__main__.B1'> 448
<__main__.B1 object at 0xb780804c> 28
__main__.C 48
<__main__.C instance at 0xb780806c> 32
<class '__main__.C1'> 448
<__main__.C1 object at 0xb780808c> 28
<function d at 0xb77ee224> 56
<function e at 0xb77ee79c> 56
<function foo at 0xb77eeb1c> 56

 

 

对于array,我们需要做一些处理

 

2. 在google后,发现一篇stackoverflow上的文章,我们需要导入pylab来做处理,这属于pythonxy集合函数包中的,我们需要做如下操作:

 

pip install NumPy
pip install scipy
sudo apt-get install python-matplotlib

 来完成所需包的安装

 

3.这时我们可以import该包来做处理

from pylab import *
import sys

if __name__=='__main__':
    A = rand(10)
    B = rand(10000)
    print sys.getsizeof(A),sys.getsizeof(B)
    print A.nbytes,B.nbytes
 

 

参考:

 

http://stackoverflow.com/questions/449560/how-do-i-determine-the-size-of-an-object-in-python

 

这是pythoner自己做处理的

http://www.flatws.cn/article/program/python/2011-05-14/25786.html

http://code.activestate.com/recipes/546530/

 

http://www.keakon.net/2010/02/15/Python2.6%E5%8F%AF%E4%BB%A5%E7%94%A8sys.getsizeof%E8%8E%B7%E5%8F%96%E5%AF%B9%E8%B1%A1%E5%A4%A7%E5%B0%8F

 

 

分享到:
评论

相关推荐

    简单的demo,python代码实现鼠标框选跟踪对象或者手动输入跟踪对象

    python,opencv2,获取鼠标事件,用来手动框选跟踪对象,或者是手动输入事先获取的跟踪对象位置大小信息

    基于python实现爬取B站小视频之获取要下载视频的大小附项目源码

    Python 的官方定义:Python 是一种解释型的、面向对象的、带有动态语义的高级程序设计语言。通俗来讲,Python 是一种少有的、既简单又功能强大的编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。 2....

    minio文件储存服务

    minio 兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支持Java,Python,Javacript, Golang语言。Minio可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在...

    PythonPIL模块根据像素大小将图片变成黑白点阵图

    Image.open :打开一张图片,获取 Image 对象。 Image.convert(mode='L') :将图片转为灰度图像 Image.crop :截取图片中的一块区域 Image.paste :将另外一张图片粘贴到当前图片中 Image.save :保存图片

    Python编程入门经典

    4.3 比较两个值的大小 51 4.4 对真值和假值取反 53 4.5 观察多个比较运算的结果 54 4.6 循环 57 4.6.1 重复执行操作 57 4.6.2 终止循环 59 4.7 处理错误 62 4.8 本章小结 64 4.9 习题 65 第5章 函数 67 5.1 将程序...

    Python技术手册(第2版)–2

    书中详细介绍了Python开发工具的安装和使用、Python语言的语法结构、Python内置对象、库和模 块以及Python与其他语言的扩展和嵌入,并专门介绍了有关Python网络和Web编程的内容和实例。本书列举了Python对象和模块中...

    python cookbook(第3版)

    5.21 序列化Python对象 第六章:数据编码和处理 6.1 读写CSV数据 6.2 读写JSON数据 6.3 解析简单的XML数据 6.4 增量式解析大型XML文件 6.5 将字典转换为XML 6.6 解析和修改XML 6.7 利用命名空间解析XML...

    python的pyautogui和opencv-python实现的屏幕录制程序源代码

    接着,我们可以利用OpenCV-Python创建一个视频流对象,这个对象与屏幕的分辨率相匹配。然后,通过PyAutoGUI的screenshot()函数来获取屏幕截图,并将其写入视频流中。这样,我们就可以实时地录制屏幕上的活动。屏幕...

    python3将视频流保存为本地视频文件

    1、利用opencv中的VideoCapture类获取视频流的链接,通过cv2的方法得到该视频流的帧数和每帧大小。 2、使用VideoWriter类进行视频编码 3、通过VideoCapture的read()方法进行视频流解码成每一帧 4、获取到每一帧frame...

    python截图源码示例

    导入相关库:首先需要导入必要的Python库,如Pillow(用于处理图像)、pyautogui(用于获取屏幕尺寸)等。 获取屏幕尺寸:使用pyautogui库的函数来获取屏幕的宽度和高度,以便截取整个屏幕的图像。 截取屏幕图像:...

    GEE python-将GEE ASSETS中存储的影像或者矢量转化为数据格式.pdf

    对于矢量,listFeatures 和 computeFeatures 方法将在返回 Python 对象之前发出多个网络请求来获取表格的所有页面。 所有这些方法都使用交互式处理环境将数据从 Earth Engine 服务器传输到客户端计算机,该环境经过...

    pyYify:这是一个python库,用于在任何给定时间获取种子最高的种子,并获取完整的电影细节和评分。 使用不同的参数搜索任何电影并获取其首选质量的磁力链接或种子文件也很有用

    搜索电影种子获取任何电影的详细信息,其中包括: 720p,1080p,3D质量的种子细节洪流磁铁链接和哈希以及它们的大小和种子imdb_code Imdb评分和MPA评分年运行概括电影说明以上所有详细信息都是通过Yify.movi​​e...

    Python-Programs:我的Python程序集

    Python程序 这是我收集的Python程序。 有关python教程,请访问我的网站: Omkar Pathak, 印度马哈拉施特拉邦浦那。 排序算法 搜索算法 二元搜寻 一元搜索 数据结构 ...获取文件大小 查找文件是否存在

    cacheout:Python的缓存库

    : PyPI: ://pypi.python.org/pypi/cacheout/ Github动作: : 特征使用字典后端的内存中缓存缓存管理器,可轻松访问多个缓存对象使用模块级缓存对象时,可重新配置的缓存设置用于运行时设置最大缓存大小强制默认...

    Python通用唯一标识符uuid模块使用案例

    它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 有着固定的大小( 128 bit ). 它的唯一性和一致性特点使得可以无需注册过程就能够产生一个新的UUID. UUID可以被用作多种用途, 既可以...

    Python set常用操作函数集锦

    定义 set是一个无序且不重复的元素集合。 集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合支持用in和not in操作符检查成员,由len()内建...python提供了常用的数据结构,其中之一就是set,python

    Python 内存分配时的小秘密

    该方法用于获取一个对象的字节大小(bytes) 它只计算直接占用的内存,而不计算对象内所引用对象的内存 这里有个直观的例子: import sys a = [1, 2] b = [a, a] # 即 [[1, 2], [1, 2]] # a、b 都...

    pyuvc:python绑定到libuvc

    的Pupil Labs分支的Python绑定,使用 (利用tubojpeg api)进行超快速的jpeg解压缩。 跨平台访问UVC捕获设备。 完全访问所有uvc设置(缩放,焦点,亮度等) 完全访问所有流和格式参数(速率,大小等) 使用...

    关于Python内存分配时的小秘密分享

    该方法用于获取一个对象的字节大小(bytes) 它只计算直接占用的内存,而不计算对象内所引用对象的内存 这里有个直观的例子: import sys a = [1, 2] b = [a, a] # 即 [[1, 2], [1, 2]] # a、b 都只有两个元素,...

Global site tag (gtag.js) - Google Analytics