python中内存使用

tracemalloc

标准库tracemalloc,可以同居内存使用情况

import tracemalloc
#开始跟踪内存分配
tracemalloc.start()
d=[dict(zip('xy',(5,6))) for i in range(10000)]
d=[tuple(zip('xy',(5,6))) for i in range(10000)]
#快照,当前内存分配
snapshot=tracemalloc.take_snapshot()
#快照对象的统计
top_stats=snapshot.statistics('lineno')
for i in top_stats:
    print(i)

在这里插入图片描述
可以看出内存使用上字典还是较为占用空间的

slots

字典为了提升查询效率,采用时间换空间
一般来说一个实例,属性多一点,都存储在字典中便于查询,但是如果数百万个实例,那么字典占的总空间就有点大了,这个时候就需要__slots__方法将属性字典__dict__省略。

class A:
    x=1
    __slots__=('y','z')
    def __init__(self):
        self.y=5
        self.z=6
    def show(self):
        print(self.x,self.y,self.z)
a=A()
print(A.__dict__)
print(a.__dict__)

slots__告诉解释器,实例的属性都叫什么,一般来说,既要节约内存,最好还是使用元组比较好,一旦类提供了__slots,就阻止实例产生__dict__来保存实例的属性。

继承
class A:
    x=1
    __slots__=('y','z')
    def __init__(self):
        self.y=5
        self.z=6
    def show(self):
        print(self.x,self.y,self.z)
class B(A):
    pass
print('B',B().__dict__)

在这里插入图片描述
slots__不影响子类实例,不会继承下去,除非子类里面自己也定义了__slots

未实现和未实现异常
print(type(NotImplemented))
print(type(NotImplementedError))
raise NotImplementedError

在这里插入图片描述

Python的对象模型

在Python的对象模型中,任何对象都有类型,可以使用type()或者__class__查看
但是类型也是对象即类对象,它也有自己的类型
在这里插入图片描述
所有新类型的缺省类型是type
特殊类型type是所有对象的缺省类型,也包括自己,但是它又是一个对象,因此从object继承
特殊类型object是继承树的顶层,它是Python所有类型的最终基类
也就是说,继承都来自object,类型都看type,type也是对象继承自object,object也有类型是type

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值