【问题标题】:Getting Python variable name or value from memory location? [duplicate]从内存位置获取 Python 变量名或值? [复制]
【发布时间】:2018-04-26 09:51:53
【问题描述】:

我浏览了论坛,我似乎无法找到答案(实际上可能没有答案)关于您是否可以通过使用其内存位置来获取变量的名称或值Python。换句话说,当我声明a = 10 并将值10 分配给变量'a',然后我在'a' 上使用id() 函数时,我得到了内存中'a' 的值所在的位置被储存了。有没有办法通过引用id() 返回的值(十进制值或使用hex() 函数将十进制值转换为十六进制)来打印变量名称('a') 或值('10')?我尝试了一些类似print(id(variable-name))print(decimal-value-from-id) 的方法,但没有运气。任何帮助将不胜感激,并提前感谢您!

干杯!

【问题讨论】:

  • 你为什么要这么做?
  • 没有。事实上,id(obj)obj 在内存中的位置是一个 CPython 实现细节,不应依赖
  • 你可以在 C 扩展中做到这一点,但不是纯 python
  • 您可以将 id 值的字典存储到变量中,并实习您的字符串以确保始终如一地应用,但您的最终目标是什么?
  • 尽管这在 CPython 中是可能的,但非常不建议您依赖它。另外,需要注意的是,id 返回的值不是链接到变量,而是链接到对象。

标签: python python-3.x variables


【解决方案1】:

ctypes 可以做到这一点:

import ctypes
a = 10
ctypes.cast(id(a), ctypes.py_object).value
#10

当然,如果对象仍然存在,这将起作用。

【讨论】:

  • 我很想对此投反对票...您可以保证它仅在 you 持有对该变量的引用时才存在,在这种情况下您可以实际存储它可以用 ID 索引的地方。
  • 您的担忧已经存在,我不建议在生产中这样做。尽管如此,这仍然是 OP 想要做的。
  • Zipa,感谢您的回复,这就是我想要的。我发布的原因是我正在讨论可变与不可变的问题,并使用 id() 函数来表明可以就地更改诸如列表之类的可变对象(其中 id() 返回相同的内存值/位置)和整数或字符串变量名称在更改时返回一个新的 id() 值(因此不能就地更改)。有人问我如何获取 id() 生成的内存位置值来获取存储在该位置的变量的名称或值 - 可以这么说有点逆向工程。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
相关资源
最近更新 更多