Python大文档字符串会浪费内存吗?

2024-05-17 00:02:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道在Python中字符串只是一个表达式,字符串本身在将控制权返回给代码调用方时会立即被垃圾回收,但是。。。在

  1. 中的大型类/方法文档字符串 你的密码:他们会浪费记忆吗 通过建立字符串对象?在
  2. 模块级单据串:是吗 由翻译无限量地存储?在

这有关系吗?我唯一担心的是,如果我使用Django这样的大型框架,或者多个大型的开源库,那么它们往往都有很好的文档记录,其中可能包含数兆字节的文本。在这些情况下,doc字符串是被加载到内存中的代码,然后保存在那里,还是像普通字符串一样立即收集?在


Tags: 模块对象方法记忆字符串代码文档密码
2条回答
  • “我知道在Python中字符串只是一个表达式,字符串本身在将控制权返回给代码调用方时会立即被垃圾回收”我认为这是一种误解。docstring只计算一次(而不是每次函数调用),并且至少与函数一样保持活动状态。

  • “这有关系吗?”说到优化,答案不是抽象地思考,而是通过衡量。”在内存密集型应用程序中,“多兆字节”的文本可能并不多。节省内存的解决方案可能存在于其他地方,您可以通过测量来确定是否是这样。

  • Python的-OO命令行开关删除docstring。

默认情况下,Python docstring是无限期保留的,因为它们可以通过函数或模块的\uuu doc_uu属性访问。例如,在测试.py公司名称:

"""This is a test module."""

def f():
   """This is a test function."""
   pass

然后:

^{pr2}$

解释器的-OO选项显然会导致它从生成的.pyo文件中删除docstring,但它没有我预期的效果:

$ python -OO
Python 2.5.1 (r251:54863, Oct 30 2007, 13:54:11) 
[GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> test.__file__
'/tmp/test.py'
>>> 
$ grep "This is a test" /tmp/test.pyo
Binary file /tmp/test.pyo matches
$ python -OO
Python 2.5.1 (r251:54863, Oct 30 2007, 13:54:11) 
[GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> test.__file__
'/tmp/test.pyo'
>>> test.__doc__
'This is a test module.'
>>> 

事实上,使用-OO生成的test.pyo文件与没有命令行参数生成的test.pyc文件完全相同。有人能解释这种行为吗?在

相关问题 更多 >