zoukankan      html  css  js  c++  java
  • python 节省内存的for循环技巧

    python 内存节省的方法

    【问题】 程序创建大量(可能上百万)对象,导致占用大量内存

    【方法】

    一、创建大量的对象

    对于主要当成简单的数据结构类而言,通过添加__slots__属性来极大的减少实例所占用的内存
    eg:

    class Date:
        __slots__ = ['year', 'month', 'day']
        def __init__(self, year, month, day):
            self.year = year
            self.month = month
            self.day = day
    

    原理: 定义__slots__后,python会使用一种更加紧凑的内部表示
    实例通过一个很小的固定大小的数组来构建,而不是为每个实例定义
    一个字典,这跟元组或列表很类似。在__slots__中列出得属性名在
    内部被映射到这个数组的指定小标上。
    缺点

    不能再给实例添加新的属性,只能使用__slots中定义的属性名。
    定义了slots后,类不在支持一些普通类特性, 比如多继承。

    二、 python 循环内存优化之生成器

    打印内容字节数较小时,全部载入内存后,再打印,没有问题。
    可是,如果成千上百万打印数据时,存在out of memory

    常用方法 使用itertools模块

    1、 拼接元素

    itertools中chain()实现元素拼接
    list(chain([1,2], [3,4]))

    底层代码实现:

    def chain(*iterables):
        for it in iterables:
            for it element in it:
                yield element
    
    

    可知,chain 本质上是一个生成器,一次读入一个元素到内存,做到高效节省内存

    2、逐个累加
    返回列表的累积汇总值

    参考连接:http://www.360doc.com/content/19/1221/14/21698786_881183436.shtml

  • 相关阅读:
    阿里--面经 搜集
    阿里一面经验总结
    System对象
    JDBC-oracle(登陆)
    博客静态页面
    设计模式(1)---Factory Pattern
    软件设计师备考经验(含新旧版本对比)
    第九课,ROS仿真1
    参数服务器相关的问题
    3.空域图像处理的洪荒之力
  • 原文地址:https://www.cnblogs.com/01black-white/p/15506705.html
Copyright © 2011-2022 走看看