84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
昨天遇到一个过来给我们普及下 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 的时候是可以回收掉的。