问题描述
Guido van Rossum tweeted:
Python 提示:您可以使用多行字符串作为多行注释。 除非用作文档字符串,否则它们不会生成任何代码! :-)
下面的多行字符串在不用作 docstring 时是否会占用一些内存空间?
'''
Hello,folks!
This is a multi-line string.
'''
解决方法
很容易确认,如果您自己编写一个字符串而不将其分配给变量或将其用作另一个语句或表达式的一部分,那么该字符串 (1) 不会生成任何 CPython 字节码,并且 (2) 会没有出现在代码对象的常量元组中:
>>> code = 'x = 1; "bar"; x = 2;'
>>> from dis import dis
>>> dis(code)
1 0 LOAD_CONST 0 (1)
2 STORE_NAME 0 (x)
4 LOAD_CONST 1 (2)
6 STORE_NAME 0 (x)
8 LOAD_CONST 2 (None)
10 RETURN_VALUE
>>> compile(code,'<string>','exec').co_consts
(1,2,None)
所以字符串在编译时就像注释一样被丢弃,因此在运行时不能出现在内存中。请注意,这适用于所有文字值,而不仅仅是多行字符串。