【问题标题】:Does python have something like pointer in C programming language?python在C编程语言中有类似指针的东西吗?
【发布时间】:2021-10-13 09:36:21
【问题描述】:

我尝试在互联网上搜索此问题,但找不到好的答案。有人说id()返回内存地址,但有人说id()不是内存地址。

在C编程语言中,有一个显示内存地址的指针,但是我不知道Python在这种情况下是如何工作的。

谁能帮我理解 Python 如何将数据保存在内存中?

【问题讨论】:

  • 没有指针吗?还是所有变量都是指针?这取决于您使用的指针的确切定义。
  • 如果您在函数内部传递一个列表并对其进行编辑,它将在两个外部进行编辑。人们可能会将此行为指针称为。
  • 您如何定义“理想答案”,即理想答案是什么?
  • 我认为你应该在发帖前做更多的研究。你需要表现出努力。
  • @khelwood 即使对于常量 True/False 也是 python 对象。每个 python 对象都有自己的 id()。 Python 编程语言没有指针,只有 id()。而在 CPython 解释器中,它使用 C 指针的值作为每个 python 对象的 id()。

标签: python pointers


【解决方案1】:

这是学习python的人的热门问题。

答案是python没有指针,而是使用id()。并且 id() 在 CPython 解释器中返回 C 语言内存地址。

python 中的一切都是 python 对象,id() 是 python 对象的标识。编写python代码时需要了解id()是如何工作的,否则会浪费很多内存空间。顺便说一句,下图展示了一些 id() 在 python 中如何工作的真实示例。

在 CPython 解释器中,id() 返回 PyObject 的 C 内存地址值。 python 中的一切都是 python 对象,即使是 True/False 值。
python中id()的描述是

返回一个对象的“身份”。这是一个整数,保证在其生命周期内对于该对象是唯一且恒定的。具有不重叠生命周期的两个对象可能具有相同的 id() 值。

Python 中有很多解释器,它们可以实现 id()。我们知道最流行的是 CPython,它的源代码在这里 https://github.com/python/cpython

实现id()的源码在这里

CPython 是 C 中的解释器。在源代码中,每个 python 对象都是 C 中的 PyObject,id() 将返回这个 PyObject 的 C 内存地址。但请记住,这并不意味着解释器应该返回 id() 的内存地址。只是CPython解释器做的,对python的规范很满意。

所以,这就是为什么我说 python 没有指针,只有 id()。而 CPython 解释器将 PyObject 的 C 内存地址作为 id() 的值返回。

【讨论】:

  • 尚不清楚 id 函数的存在或行为应该如何解决 OP 关于指针的不确定性。
  • 嗨@khelwood,感谢您的回复。当您说“OP的不确定性”时,您是什么意思?你在这里说的OP是什么?
  • OP 的意思是“原始发帖人”:提出问题的人。
  • @khelwood 在这个答案的开头,它说答案是python没有指针但使用id()。并且 id() 在 CPython 解释器中返回 C 语言内存地址。这是回答这个问题的关键。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
相关资源
最近更新 更多