我试图在内存方面对Python对象和其他语言元素(如return
和def
)和运算符(例如+
和-
)进行概念上的区分。我知道对象存储在内存中,它们有内存ID和大小。可以分别使用id(object)
和sys.getsizeof(object)
找到id和大小。
关键字和运算符等非对象是否也存储在内存中?如果是,它们是以与对象相同的方式存储还是以不同的方式存储? return
和def
有一个像字符串“Foo”和文本10的插槽吗?
它们并不像对记忆的大量浪费那样。我不确定脚本语言,但通常编译器会为运算符或关键字创建二进制代码。然后在运行应用程序时将它们加载到内存中。
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
操作。