【问题标题】:Are keywords, operators, etc stored in memory like objects?关键字、运算符等是否像对象一样存储在内存中?
【发布时间】:2019-02-13 14:26:27
【问题描述】:
我试图在内存方面对 Python 对象和其他语言元素(例如关键字(例如 return 和 def)和运算符(例如 + 和 -)进行概念区分。我知道对象存储在内存中,并且它们具有内存 ID 和大小。 id 和 size 可以分别用id(object) 和sys.getsizeof(object) 找到。
关键字和运算符等非对象是否也存储在内存中?如果是,它们是以与对象相同的方式存储还是不同? return 和 def 是否有像字符串 "Foo" 和 text 10 这样的槽?
【问题讨论】:
标签:
python
object
memory
operators
keyword
【解决方案1】:
它们不会浪费大量内存。我不确定脚本语言,但通常编译器会为运算符或关键字创建二进制代码。然后在您运行应用程序时将它们加载到内存中。
【解决方案2】:
Python 是一种编译语言;您习惯查看的 Python 源代码被编译为实际执行的类似程序集的字节码。
例如:
def foo(x):
return x + 1
变成
>>> type(foo)
<class 'function'>
>>> dis.dis(foo)
2 0 LOAD_FAST 0 (x)
2 LOAD_CONST 1 (1)
4 BINARY_ADD
6 RETURN_VALUE
def 关键字本身没有被表示;相反,它会导致创建 function 对象。这个对象有一个__code__ 属性,它由上面显示的字节码序列组成。同样,return 关键字会导致生成 RETURN_VALUE 操作。