V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
silva
V2EX  ›  Python

[求证] python 的注释会占用内存么?

  •  2
     
  •   silva · 2016-11-09 11:14:03 +08:00 · 6458 次点击
    这是一个创建于 2971 天前的主题,其中的信息可能已经有所发展或是发生改变。
    昨天遇到一个过来给我们普及下 python ,过程中间他提到 python 里的注释会占用更多内存,用三个引号"""阔起来就不会了

    我当时感觉这个说法太过匪夷所思,就问是何缘故,可惜他推说不记得了,只说曾经专门给某公司写了个脚本把所有的注释都用"""阔起来,当时就是为了避免空间浪费。

    下来之后我自己查找 python 的空间消耗一类的文章,未见有此说法。因此到此地找诸位高手求证
    第 1 条附言  ·  2016-11-09 15:52:34 +08:00
    14 楼的仁兄完美解决了该问题
    21 条回复    2016-11-09 23:19:44 +08:00
    shyling
        1
    shyling  
       2016-11-09 11:16:52 +08:00
    会啊...__doc__
    myyou
        2
    myyou  
       2016-11-09 11:18:56 +08:00
    应该不占用吧, python 编码为机器码时会忽略注释的内容。
    ryanzyy
        3
    ryanzyy  
       2016-11-09 11:19:18 +08:00
    试试 python -OO
    janxin
        4
    janxin  
       2016-11-09 11:19:47 +08:00
    __doc__应该会,但是你说"""引用起来不会我就不懂了,等大神解释下?
    silva
        5
    silva  
    OP
       2016-11-09 11:37:25 +08:00
    看到有不少同学回复说__doc__的话,会占用,但是__doc__是在诸如函数之后的第一个字符串。并不是用#开始的注释。所以应该不是__doc__的原因吧。

    顺便问下我如何才能在顶部补充自己的帖子,而不是回帖额。。。
    aias
        6
    aias  
       2016-11-09 11:39:28 +08:00
    @silva APPEND
    lhbc
        7
    lhbc  
       2016-11-09 12:46:54 +08:00 via iPhone
    1. 不会占用内存
    2. 注释占用大量的硬盘空间
    3. 注释严重影响载入速度,
    coderluan
        8
    coderluan  
       2016-11-09 13:34:56 +08:00
    写了个脚本把所有的注释都用"""阔起来

    这句话明确说明了他说的注释应该是__doc__之类的吧,没人会说因为"""占内存,所以再加些"""把他们注释了。
    silva
        9
    silva  
    OP
       2016-11-09 13:39:40 +08:00
    @coderluan __doc__本身就是字符串,用"""括起来也没有啥意思吧

    @aias thanks...
    9hills
        10
    9hills  
       2016-11-09 13:40:26 +08:00
    #开头的不会,反倒是函数和类开头的"""包起来的会,因为是__doc__。。。

    你说的那位应该是记反了。。。
    silva
        11
    silva  
    OP
       2016-11-09 13:41:46 +08:00
    @lhbc 直觉上我觉得你说的靠谱
    silva
        12
    silva  
    OP
       2016-11-09 13:50:55 +08:00
    @9hills 谢谢,我想应该是这么回事


    @ryanzyy 我只看到-O0 选项是“ -O0 Discard docstrings in addition to the -O optimizations.” 没看见-OO 是干啥的呢
    wellsc
        13
    wellsc  
       2016-11-09 14:32:51 +08:00
    @silva 会把 .py 编译成 .pyo ,然而没啥用
    WKPlus
        14
    WKPlus  
       2016-11-09 15:39:43 +08:00   ❤️ 13
    这个问题蛮有意思,我测试了一下:
    1. 被 import 的函数没有注释,没有__doc__,进程启动后 RSS 4396KB
    2. 被 import 的函数带有~16MB 左右的注释,没有__doc__,进程启动后 RSS 4396KB
    3. 被 import 的函数没有注释,带有~16MB 的__doc__,进程其启动后 RSS 20036KB
    4. 被 import 的函数没有注释,没有__doc__,但是内部有一个没有使用到的~16MB 的 str 对象(不管是"""还是"引起来),进程启动后 RSS 20036KB
    5. 第四步的基础上,调用一次 gc.collect(),然后再统计进程内存使用,发现 RSS 4400KB


    所以我觉得 9hills 的猜测是对的,那位记反了:用"""的方式注释掉一段代码其实只是把它变成一个没有引用的 str 对象,还是占着内存的,#的方式注释才是真正的注释。

    不过从第 5 步的测试结果来看,"""方式的注释生成的只是一个没有引用的 str 对象, gc 的时候是可以回收掉的。
    pango
        15
    pango  
       2016-11-09 15:44:32 +08:00
    @WKPlus 赞认真的态度
    silva
        16
    silva  
    OP
       2016-11-09 15:51:27 +08:00 via Android
    @WKPlus 太感谢了,我还正在考虑找个 linux 环境,用进程内存来看大小呢,您就解决了。
    看步骤,似乎 python 有自己查看内存大小的功能,但是我直接搜索"python rss",一无所获。能说明下关键词一类的麽,谢谢
    dream7758521
        17
    dream7758521  
       2016-11-09 16:17:33 +08:00 via Android
    上机测试一下不就知道了啊
    WKPlus
        18
    WKPlus  
       2016-11-09 16:24:30 +08:00
    @silva centos 上,查看 /proc/<pid>/status 文件,里面的 VmRSS 就是进程的物理内存使用量
    silva
        19
    silva  
    OP
       2016-11-09 17:13:35 +08:00 via Android
    @WKPlus 哦,谢谢


    @dream7758521 我突然想到其实在 win 下也可以用任务管理器看内存…之前老去想找个 linux 环境做试验…是我蠢了
    WangYanjie
        20
    WangYanjie  
       2016-11-09 21:13:53 +08:00
    我觉得,你肯能弄反了, 注释不会, docstring 会。
    首先 docstring 不是注释,其次既然你在运行时,是可以获取 docstring 的,那么显然 docstring 没有被忽略。
    mingyun
        21
    mingyun  
       2016-11-09 23:19:44 +08:00
    @WKPlus
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2121 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:22 · PVG 09:22 · LAX 17:22 · JFK 20:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.