如何通过 id 访问变量? [复制]
Posted
技术标签:
【中文标题】如何通过 id 访问变量? [复制]【英文标题】:How to access variable by id? [duplicate] 【发布时间】: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。这是一个禅宗问题,没有实际背景。
【参考方案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)
但正如其他人指出的那样:首先确保没有更好的解决方案更适合您的需求
【讨论】:
另见***.com/a/1396690/514485。和几乎所有其他人一样,我提醒你,你可能不想/不需要这样做。以上是关于如何通过 id 访问变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 JavaScript 访问一些具有相同名称的变量? [复制]