python变量(引用)的底层 2023-05-29

2023-05-28  本文已影响0人  9_SooHyun

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的高级封装:

上一篇 下一篇

猜你喜欢

热点阅读