【问题标题】:How to access variable by id? [duplicate]如何通过 id 访问变量? [复制]
【发布时间】:2012-12-24 19:21:33
【问题描述】:

可能重复:
Get object by id()?

>>> var = 'I need to be accessed by id!'
>>> address = id(var)
>>> print(address)
33003240

有没有什么方法可以使用id()提供的内存中var的地址来访问var的值?

UPD:
我还想说,如果这不能在标准 Python 中完成,那也很有趣,如果这可以通过破解 Python 的 C++ 内部实现。

UPD2: 还想知道如何更改 var 的值。

【问题讨论】:

  • 你不能。 id() 的返回值不是引用。 cpython 在此处返回内存地址这一事实是一个实现细节,将其用作参考不是函数的目标。
  • 你为什么要以任何神的名义这样做? Martijn 是正确的,即使您可以在 CPython 中以某种方式破解它,它也只是一个实现细节。
  • 你为什么要这样做?
  • 你想达到什么目的?可能还有其他方法可以实现您需要做的任何事情。
  • 第一个目标:好玩;第二:通过引用传递——有时它需要更大的灵活性,尽管它不是pythonic。这是一个禅宗问题,没有实际背景。

标签: python pointers reference pass-by-reference pass-by-value


【解决方案1】:

仅针对您的情况的解决方案是:

var = 'I need to be accessed by id!'
address = id(var)
print(address)
var2 = [x for x in globals().values() if id(x)==address]

它也可以在像这样的函数内部工作

def get_by_address(address):
    return [x for x in globals().values() if id(x)==address]

var = 'I need to be accessed by id!'
address = id(var)
print(address)
var2 = get_by_address(address)

但正如其他人指出的那样:首先确保没有更好的解决方案更适合您的需求

【讨论】:

猜你喜欢
  • 2020-06-15
  • 1970-01-01
  • 2022-01-23
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 2020-04-29
  • 2011-07-14
相关资源
最近更新 更多