如何通过 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 访问一些具有相同名称的变量? [复制]

如何将访问密钥和秘密密钥 shell 变量传递给 Redshift 复制命令

如何访问块外的变量? [复制]

如何根据变量(例如日期)循环访问 URL? [复制]

如何在 Python 中使私有变量可访问? [复制]

如何从同一项目中的另一个类访问主类中的变量? [复制]