美文网首页
python变量(引用)的底层 2023-05-29

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

作者: 9_SooHyun | 来源:发表于2023-05-28 14:31 被阅读0次

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 *指向的内存值。

相关文章

  • 引用的本质:栈内存和堆内存

    在python中,变量:对象的引用。因为,变量存储的就是对象的地址,变量通过地址引用了‘对象’。 变量位于:栈内存...

  • 变量(引用)的使用与删除、常量

    变量 变量就是对象的引用,即变量通过地址引用了“对象” 变量位于栈内存;对象位于堆内存 *python是动态类型语...

  • day20

      1.python中变量的赋值   python中所有的数据都是对象,所有的变量都是对象的引用  python对...

  • day20-python中的内存管理机制

    1、python中变量的赋值a、python中所有的数据都是对象,所有的变量都是对象的引用。b、python对数字...

  • python学习笔记|nonlocal/global

    python中引用变量的顺序为:当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变...

  • 2018-09-14 day20-内存管理机制

    python中变量的赋值 python中所有的数据都是对象,所有的变量都是对象的引用 python对数字、字符串(...

  • 2018-09-14内存管理机制(day20)

    1.python中变量的赋值 python中所有的数据都是对象,所有的变量都是对象的引用 python对数字、布尔...

  • Python弱引用

    Python弱引用 弱引用:新增变量时,变量计数器不会增加。弱引用与强引用相对,是指不能确保其引用的对象不会被垃圾...

  • 内存管理机制

    1.python中变量的赋值 python中所有的数据都是对象,所有的变量都是对象的引用python对数字,字符串...

  • 2018-09-15 day20-内存管理

    1.python中变量的赋值 python中所有的数据都是对象,所有的变量都是对象的引用python对数字,字符串...

网友评论

      本文标题:python变量(引用)的底层 2023-05-29

      本文链接:https://www.haomeiwen.com/subject/bwldedtx.html