[求证] python 的注释会占用内存么? - V2EX
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 6777 次点击
    这是一个创建于 3263 天前的主题,其中的信息可能已经有所发展或是发生改变。
    昨天遇到一个过来给我们普及下 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 cents 上,查看 /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     Solana     3387 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 04:34 PVG 12:34 LAX 21:34 JFK 00:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86