美文网首页
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变量(引用)的底层 2023-05-29

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