Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的赋值_Python_C_Compilation - Fatal编程技术网

Python中的赋值

Python中的赋值,python,c,compilation,Python,C,Compilation,我想知道内部会发生什么,这样使用Python就不需要在将变量类型赋给某个对象之前声明它。 其他语言(如C)在赋值阶段之前保留内存 我只是想知道编译时会发生什么,以便Python可以跳过这一步?好吧,我认为Python不会跳过这一步,他所做的是查找变量中的值,然后他应该知道它是什么类型的变量。比如: a=5 b=5.0 Python将查看,a中的值是多少,它是五,所以让我们将这个变量设为整数!然后移动到下一个变量。如果深入C级,所有Python对象都是PyObject*类型,并在堆上分配。变量

我想知道内部会发生什么,这样使用Python就不需要在将变量类型赋给某个对象之前声明它。 其他语言(如C)在赋值阶段之前保留内存


我只是想知道编译时会发生什么,以便Python可以跳过这一步?

好吧,我认为Python不会跳过这一步,他所做的是查找变量中的值,然后他应该知道它是什么类型的变量。比如:


a=5
b=5.0


Python将查看,
a
中的值是多少,它是五,所以让我们将这个变量设为整数!然后移动到下一个变量。

如果深入C级,所有Python对象都是
PyObject*
类型,并在堆上分配。变量只是绑定到这些对象的名称(通常实现为哈希映射项)。

Python中的变量只是对对象的引用。对象的内存是在对象实例化时在运行时分配的。

可能重复的旁注:Python不是编译语言。@ylabidi是。通常所说的“解释器”实际上是一个字节码编译器。@ylabidi,它通常被编译成字节码。非类型字节码,就是这样。PyPy.Python还存储引用;那些总是同一类型的。在一个大的内存堆中,对象被存储起来,它们自己跟踪它们是什么类型的。Python编译器不需要对此做任何事情,而是解释器的工作。例如,如果我做
a=5
,那么会创建一个PyObject*,它每次分配相同的内存?谢谢@MaxNoelIntegers是一个特例——它们也是
PyObject*
,但由于它们非常常见且不可变,所以它们被缓存。因此,无论在程序中使用多少次,每个整数只分配一次。列表,目录,集合和自定义对象,就像你说的,是的,明白了!非常感谢您的帮助@MaxNoel。