关键字,运算符等是否像对象一样存储在内存中?

时间:2019-02-13 14:26:28

标签: python object memory operators keyword

我正在尝试在Python对象与其他语言元素(例如关键字(例如returndef)和运算符(例如+-)之间进行概念上的区分)的记忆。我知道对象存储在内存中,并且它们具有内存ID和大小。可以分别通过id(object)sys.getsizeof(object)来找到id和大小。

关键字和运算符等非对象是否也存储在内存中?如果是,它们是否以与对象相同或不同的方式存储? returndef是否具有像字符串“ Foo”之类的插槽和文本10那样的插槽?

2 个答案:

答案 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操作。