Python 多行字符串在内存中占用一些 space 吗?
Do Python multi-line strings take some space in the memory?
吉多·范·罗森 tweeted:
Python tip: You can use multi-line strings as multi-line comments.
Unless used as docstrings, they generate no code! :-)
下面的多行字符串在不用作 docstring 时是否会在内存中占用一些 space?
'''
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)
因此字符串在编译时被丢弃,就像注释一样,因此在运行时不能存在于内存中。请注意,这适用于所有文字值,而不仅仅是多行字符串。
吉多·范·罗森 tweeted:
Python tip: You can use multi-line strings as multi-line comments. Unless used as docstrings, they generate no code! :-)
下面的多行字符串在不用作 docstring 时是否会在内存中占用一些 space?
'''
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)
因此字符串在编译时被丢弃,就像注释一样,因此在运行时不能存在于内存中。请注意,这适用于所有文字值,而不仅仅是多行字符串。