为什么python字典会占用这么多内存?

teebagz

我已经看到了与此类似的问题,但我认为我的困境在足以提出新问题的方式上是不同的。

我创建了一个函数,该函数可以打开一个csv文件,并根据维度和指标列表将数据聚合为类似json的字典结构。

问题是当我用它打开一个0.97GB的文件时,当我查看进程时,python进程正在使用大约1.02GB的内存。请记住,我只选择文件中一部分字段,并且数据是聚合的,因此我认为从本质上讲应该较小。另外,字典变量是从函数中返回的唯一内容,这不意味着它是函数运行后保留在内存中的唯一内容吗?有谁知道为什么我的字典对象占用这么多内存?

**编辑-这也是我的理解,csv.reader()是一个生成器,因此我什至没有一次加载整个文件,因此它一定只是使用所有内存的字典对象吗?

我在Windows上使用Python 2.7。

import json
import inspect
from pprint import pprint
import csv
from datetime import datetime
import sys


def jsonify_csv(fileString, dimensions, metrics, struc = {}):
    with open(fileString, 'rb') as f:
        reader=csv.reader(f)
        headings = reader.next()
        i = 0
        for line in reader:
            i+=1
            row =  {headings[i]:v for i, v in enumerate(line)}
            pointer = struc
            for dimension in dimensions:
                if dimension == 'date':
                    val = str(datetime.strptime(row[dimension], "%d/%m/%Y").date().month)
                else:
                    val = str(row[dimension])
                pointer.setdefault(val, {})
                pointer = pointer[val]
            for metric in metrics:
                pointer.setdefault(metric, 0.0)
                try:
                    pointer[metric] += float(row[metric])
                except ValueError:
                    pass
    return struc


start = datetime.today()

dims = ['brand', 'source', 'affiliate', 'country', 'store', 'salesbundle', 'product', 'ordertype', 'returncode', 'supplier', 'category']

metrics = ['sales', 'qty', 'cogs', 'carriagereclaim', 'Carriage Charged Carrier', 'carriage_est', 'mktg_est', 'mktg_cost', 'royalty', 'finance', 'scrap_cost', 'mp_cost', 'budgetsales', 'budgetcosts', 'BSTD', 'budgetaftersales', 'budgetscrap', 'budgetcarriagerecovery', 'budgetcarriagepaid', 'budgetmetapack', 'budgetmarketing', 'budgetaffiliate', 'budgetoffline', 'budgetroyalty', 'budgetfinance', 'bundle_qty', 'misc_adjustments']

jsonified = jsonify_csv('PhocasSales_2015+.csv', dims, metrics)

print 'file opened', datetime.today()-start

stop = raw_input("waiting...")
克达克

每个呼叫将使用相同的字典。参见http://docs.python-guide.org/en/latest/writing/gotchas/空字典{}是在编译时作为函数的属性创建的。

如果使用默认值调用该函数28次,则不会获得28个不同的字典,它们将共享同一字典。将其默认设置为“无”,然后在函数主体中测试其值。

试试这个:

def jsonify_csv(fileString, dimensions, metrics, struc = None):
    if struc is None:
        struc = {}

    with open(fileString, 'rb') as f:
    ... # and so on

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么从文件读取的numpy narray会占用这么多内存?

来自分类Dev

当我使用scipy乘以两个CSR矩阵时,为什么会占用这么多内存?

来自分类Dev

为什么我的UIImage占用这么多内存?

来自分类Dev

为什么我的UIImage占用这么多内存?

来自分类Dev

Clojure:为什么此编写器会占用这么多堆空间?

来自分类Dev

为什么简单的程序会占用这么多的存储空间?

来自分类Dev

为什么简单的程序会占用这么多的存储空间?

来自分类Dev

Python:为什么等待线程占用这么多 CPU

来自分类Dev

为什么我的页表占用了这么多内存?

来自分类Dev

CentOS:为什么“ cma”进程占用这么多RAM?

来自分类Dev

IE为什么要占用这么多CPU?

来自分类Dev

扫描为什么要占用这么多空间?

来自分类Dev

为什么Grunt / Gulp插件占用这么多空间?

来自分类Dev

为什么这段代码会占用那么多内存?

来自分类Dev

为什么这个Haskell程序分配这么多内存?

来自分类Dev

为什么这个tensorflow循环需要这么多的内存?

来自分类Dev

为什么此程序会消耗这么多内存?

来自分类Dev

为什么 WriterT State 需要这么多内存?

来自分类Dev

POP桌面:占用这么多内存和cpu的'gjs'进程是什么?

来自分类Dev

什么是`/home/.ecryptfs`,为什么它占用这么多空间?

来自分类Dev

为什么有这么多python版本在使用?

来自分类Dev

为什么iostream在MCU上占用这么多闪存空间?

来自分类Dev

为什么/ lib / modules在xubuntu上占用了这么多空间?

来自分类Dev

为什么/ lib / modules在xubuntu上占用了这么多空间?

来自分类Dev

为什么我的自托管wordpress网站占用这么多空间?

来自分类Dev

为什么XCode命令行工具占用这么多空间?

来自分类Dev

MPG文件为什么要占用这么多空间?它是过时的格式吗?

来自分类Dev

Cygwin杂物包为什么要占用这么多空间?

来自分类Dev

为什么C#内存流保留这么多内存?

Related 相关文章

  1. 1

    为什么从文件读取的numpy narray会占用这么多内存?

  2. 2

    当我使用scipy乘以两个CSR矩阵时,为什么会占用这么多内存?

  3. 3

    为什么我的UIImage占用这么多内存?

  4. 4

    为什么我的UIImage占用这么多内存?

  5. 5

    Clojure:为什么此编写器会占用这么多堆空间?

  6. 6

    为什么简单的程序会占用这么多的存储空间?

  7. 7

    为什么简单的程序会占用这么多的存储空间?

  8. 8

    Python:为什么等待线程占用这么多 CPU

  9. 9

    为什么我的页表占用了这么多内存?

  10. 10

    CentOS:为什么“ cma”进程占用这么多RAM?

  11. 11

    IE为什么要占用这么多CPU?

  12. 12

    扫描为什么要占用这么多空间?

  13. 13

    为什么Grunt / Gulp插件占用这么多空间?

  14. 14

    为什么这段代码会占用那么多内存?

  15. 15

    为什么这个Haskell程序分配这么多内存?

  16. 16

    为什么这个tensorflow循环需要这么多的内存?

  17. 17

    为什么此程序会消耗这么多内存?

  18. 18

    为什么 WriterT State 需要这么多内存?

  19. 19

    POP桌面:占用这么多内存和cpu的'gjs'进程是什么?

  20. 20

    什么是`/home/.ecryptfs`,为什么它占用这么多空间?

  21. 21

    为什么有这么多python版本在使用?

  22. 22

    为什么iostream在MCU上占用这么多闪存空间?

  23. 23

    为什么/ lib / modules在xubuntu上占用了这么多空间?

  24. 24

    为什么/ lib / modules在xubuntu上占用了这么多空间?

  25. 25

    为什么我的自托管wordpress网站占用这么多空间?

  26. 26

    为什么XCode命令行工具占用这么多空间?

  27. 27

    MPG文件为什么要占用这么多空间?它是过时的格式吗?

  28. 28

    Cygwin杂物包为什么要占用这么多空间?

  29. 29

    为什么C#内存流保留这么多内存?

热门标签

归档