昨天遇到一个过来给我们普及下 python ,过程中间他提到 python 里的注释会占用更多内存,用三个引号"""阔起来就不会了 我当时感觉这个说法太过匪夷所思,就问是何缘故,可惜他推说不记得了,只说曾经专门给某公司写了个脚本把所有的注释都用"""阔起来,当时就是为了避免空间浪费。 下来之后我自己查找 python 的空间消耗一类的文章,未见有此说法。因此到此地找诸位高手求证
这个问题蛮有意思,我测试了一下: 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 的时候是可以回收掉的。
这个问题蛮有意思,我测试了一下:
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 的时候是可以回收掉的。