python变量底层是指针
先说结论:python中的变量,在C底层是一个PyObject *
类型的指针
在python的赋值语句中,被赋值的变量底层实际上是指针。例如
a = objxxx # 意味着 "分配了指针": a底层的指针指向了objxxx
a = another_obj # 修改了a底层指针的指向
python变量底层是PyObject *
类型的指针
A PyObject
is in fact just a Python object at the C level. Every value you can touch in Python is a PyObject
in C.
Then, each variable at python level is a PyObject *
pointer at the C level
just like the cython code shows below:
# name 是一个变量,它的C底层是一个`PyObject *`类型的指针
name = "古明地觉"
# 而在 C 中,指针是可以相互转化的
# 这里我们转成 void * 类型,再由 void * 转成整型
print(<Py_ssize_t><void *> name)
"""
2198935240400
"""
# 我们得到了一串数字,因为地址本身就是一串数字
# 所以它和我们调用 id 函数的结果是一样的
print(id(name))
"""
2198935240400
"""
reference是对pointer的高级封装
python层面不存在 pointer 的概念,而只存在 reference 的概念
reference是对pointer的高级封装:
-
自动改变指向。对变量的赋值操作,python自动修改该变量对应的底层
PyObject *
的指向。 -
自动取值。对变量的取值操作,python自动获取该变量对应的底层
PyObject *
指向的内存值。
网友评论