当我们看下面的代码时,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 varprintf ("%d", &var_ptr); % Prints address of var_ptr
1 回答
拉丁的传说
TA贡献1789条经验 获得超8个赞
你不能,但原因是如此根本,我认为无论如何都值得发布。在 C 语言中,一个指针可以指向任何变量,包括另一个指针。(另一种指针变量,即:你可以写&p
,但不能写&(p+1)
。)在 Python 中,每个变量都是一个指针,但每个指针都指向一个对象。
不是对象的变量不能是指针的引用。然而,变量可以是对象的一部分o.foo
,可以作为或访问o[bar]
(其中 bar 可能是索引或字典键)。事实上,除局部变量外,每个变量都是这样一个对象组件;作为推论,不可能从任何其他函数分配给局部变量。相比之下,C 通过传递&local
给任何其他函数来定期执行此操作。(“任何其他函数”有一个例外:nonlocal
可以分配变量,但嵌套函数中使用的每个局部变量都是通过隐式创建一个cell
对象作为变量的基础值并将变量的用法解释为引用来实现的一个它的属性!)
C++ 容器很容易说明这种区别:它们通常提供operator[]
返回一个引用(一个指针,像 Python 引用一样,自动取消引用)到一个=
可以应用的元素,而 Python 等价物是提供两者__getitem__
(返回一个参考)和(它一次__setitem__
实现所有存储到一个变量)。[]=
当然,在 CPython 的实现中,每个 Python 变量都是一个PyObject*
变量,a PyObject**
to one 可以用于内部目的,但那些总是临时的,甚至在 Python 级别概念上都不存在。因此,对他们来说没有等价物id
。
添加回答
举报
0/150
提交
取消