程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-05(3)

2023-06(2)

python在类中使用__slot__属性

发布于2019-09-09 13:02     阅读(924)     评论(0)     点赞(17)     收藏(4)


在类中定义__slot__属性来限制实例的属性字段,在创建大量对象的场合可以减少内存占用。

创建大量对象是内存占用对比:

  1. 类中不使用__slot__
复制代码
class MySlot:def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

@profile()
def main():
    myObj_list = list()
    for i in range(50000):
        myObj = MySlot(i, i, i)
        myObj_list.append(myObj)
复制代码

执行结果:

Line # Mem usage Increment Line Contents
================================================
401 39.7 MiB 39.7 MiB @profile()
402 def main():
403 39.7 MiB 0.0 MiB myObj_list = list()
404 49.9 MiB 0.0 MiB for i in range(50000):
405 49.9 MiB 0.1 MiB myObj = MySlot(i, i, i)
406 49.9 MiB 0.4 MiB myObj_list.append(myObj)

占用内存约10M

 

  1. 类中使用__slot__
复制代码
class MySlot:
    __slots__ = ('a', 'b', 'c')
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

@profile()
def main():
    myObj_list = list()
    for i in range(50000):
        myObj = MySlot(i, i, i)
        myObj_list.append(myObj)
复制代码

执行结果:

Line # Mem usage Increment Line Contents
================================================
401 40.3 MiB 40.3 MiB @profile()
402 def main():
403 40.3 MiB 0.0 MiB myObj_list = list()
404 45.7 MiB 0.0 MiB for i in range(50000):
405 45.7 MiB 0.1 MiB myObj = MySlot(i, i, i)
406 45.7 MiB 0.3 MiB myObj_list.append(myObj)

占用内存约5M

 

  1. 说明

  __slot__限制了属性值,添加__slot__元组之外的属性会报错!

  __slot__限制的是实例属性的添加,不限制类属性的添加!

 



所属网站分类: 技术文章 > 博客

作者:heer

链接:https://www.pythonheidong.com/blog/article/104136/b6dff699da3b5d5701e7/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)