【问题标题】:how to get memory location of a variable in Python如何在Python中获取变量的内存位置
【发布时间】:2020-11-08 23:45:51
【问题描述】:

当我们看下面的代码时,

my_var = "Hello World"
id(my_var)

语句id(my_var)返回字符串对象“Hello World”的地址/位置

我想知道我们是否有任何命令,我可以通过它获取my_var 的地址/位置


我正在尝试理解 Python 中的内存。例如,在 C 编程中,我可以通过以下方式获取变量和指针的地址

int var;
int *var_ptr = &var;

printf ("%d", var_ptr);  % Prints address of var
printf ("%d", &var_ptr); % Prints address of var_ptr

【问题讨论】:

  • 对于像 Python 这样的语言来说,你的想法太低级了。 id(my_var) 返回字符串的地址甚至不是标准的。也就是afaik,一个CPython的实现细节。
  • hmm.. 可能是.. 我刚刚开始了解“垃圾收集”在 Python 中的工作原理。所以,我有这个疑问... + 我真正开始欣赏 C :)
  • 这个回答你的问题吗:stackoverflow.com/questions/121396/…
  • 这能回答你的问题吗? Accessing Object Memory Address
  • 在与 Python 打交道时,您真的不必担心,甚至不必考虑地址,除非您正在做一些小众的事情,例如与 C 接口。

标签: python


【解决方案1】:

不能,但原因是如此根本,我认为无论如何都值得发布。在 C 语言中,可以形成指向任何变量 的指针,包括另一个指针。 (另一个指针变量,即:你可以写&p,但不能写&(p+1)。)在Python中,每个变量都是一个指针,但每个指针都指向一个对象

一个变量,不是一个对象,不能是一个指针的引用。然而,变量可以是对象的部分,可以作为o.fooo[bar] 访问(其中 bar 可能是索引或字典键)。事实上,除了局部变量之外,每个变量都是这样一个对象组件;作为推论,不可能从任何其他(非嵌套)函数分配给局部变量。相比之下,C 通过将&local 传递给任何其他函数来定期执行此操作。

C++ 容器很容易说明这种区别:它们通常提供 operator[] 以返回一个 引用(一个指针,像 Python 引用一样,会自动取消引用)指向 @987654327 所指向的元素@ 可以应用,而 Python 等效项是同时提供 __getitem__(返回引用)和 __setitem__(实现 []= all at once存储到变量中)。

当然,在 CPython 的实现中,每个 Python 变量都是一个 PyObject* 变量,而一个 PyObject** 可以用于内部目的,但这些始终是临时的,甚至在 Python 级别概念上也不存在。因此,对于他们来说,id 没有等效

【讨论】:

    猜你喜欢
    • 2018-04-02
    • 2018-04-26
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多