为什么Python 3.5会占用如此多的内存?比Python 3.4更多

时间:2016-05-14 11:31:16

标签: python python-3.x memory-management python-3.4 python-3.5

我已经将我的Ubuntu升级到了16.04,并且随之将Python 3.4升级到新版本的Python 3.5。

我运行了我的python代码而且我已经麻木了。它使用的内存比以前多1.5倍-2倍。相同的代码!

计算下面内存探查器列表的对象:

=== Python 3.5 ===============================================
                            types |   # objects |   total size
================================= | =========== | ============
                     <class 'dict |        3526 |      2.93 MB
                      <class 'str |       24322 |      2.70 MB
                     <class 'type |        1255 |      1.22 MB
                     <class 'code |        8240 |      1.13 MB
                    <class 'tuple |        3257 |    215.20 KB
                      <class 'set |         566 |    203.81 KB
                     <class 'list |        1356 |    179.02 KB
<class 'builtin_function_or_method|        2356 |    165.66 KB
                  <class 'weakref |        2005 |    156.64 KB
       <class 'wrapper_descriptor |        1278 |     99.84 KB
                      <class 'int |        3488 |     96.62 KB
              function (__init__) |         650 |     86.33 KB
        <class 'method_descriptor |        1212 |     85.22 KB
        <class 'getset_descriptor |        1179 |     82.90 KB
              <class 'abc.ABCMeta |          70 |     66.92 KB

=== Python 3.4 ===============================================
                            types |   # objects |   total size
================================= | =========== | ============
                     <class 'dict |        2306 |      2.12 MB
                      <class 'str |       16819 |      1.90 MB
                     <class 'type |         865 |    824.64 KB
                     <class 'code |        5586 |    785.75 KB
                      <class 'set |         390 |    159.81 KB
                    <class 'tuple |        2206 |    147.46 KB
<class 'builtin_function_or_method|        2170 |    135.62 KB
                  <class 'weakref |        1444 |    112.81 KB
                     <class 'list |         717 |     97.89 KB
       <class 'wrapper_descriptor |        1220 |     95.31 KB
                      <class 'int |        2753 |     75.85 KB
        <class 'method_descriptor |        1067 |     75.02 KB
        <class 'getset_descriptor |         799 |     56.18 KB
              function (__init__) |         399 |     52.99 KB
              <class 'abc.ABCMeta |          46 |     42.16 KB
==============================================================

我想提醒一下 - 相同的代码给出了不同的结果。

为什么会这样?请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我发现了问题。这是pycurl或libcurl库或两者中的内存泄漏。我的应用占用了比以前多2倍-3倍的内存。

当我将这些库的新版本替换为旧版本时,应用程序返回到之前的内存使用情况。

但是,由于新实现的功能,Python 3.5使用的内存比Python 3.4高10%。这很正常。

感谢。