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