如何在Python中为变量分配内存地址?

5 python variables pointers

这是场景:

我愚蠢地忘记将返回的对象分配给变量:

>>> open("random_file.txt")
<open file 'random_file.txt', mode 'r' at 0x158f780>
Run Code Online (Sandbox Code Playgroud)

有没有办法直接将内存地址分配给变量?大致相当于的东西

int *ptr;
*ptr = 0x158f780;
Run Code Online (Sandbox Code Playgroud)

反点:

  1. 在这种情况下,我可以丢弃对象 - 文件以读取模式打开,对象将由GC收集.但我对于需要以确定性方式释放资源的场景的解决方案感兴趣.

  2. 我假设"at 0x158f780"部分只是对象的id() - 恰好是CPython中的内存地址("这是特定于实现的,可能会改变,等等").所以我对这两种情况都感兴趣 - 将变量绑定到id()值会很好(更便携,什么不可以),但是将它绑定到裸内存地址也可以

  3. 我做了一些谷歌左右任何"python指针"相关,变量/内存地址分配和类似,但似乎我的谷歌fu不够强大.

干杯,

编辑:

读完答案并浏览python文档后的一些切线:文件对象由REPL _ var引用.一旦_被分配给下一个命令的结果,我认为它的引用计数变为0.文件对象从内存中删除,如果我们假设它实现了一个理智的__del__方法,它应该处理所有的低级别细节,即关闭文件等.http://docs.python.org/reference/datamodel.html#object.__del__详细介绍了一般情况.

那我和我将把0.0.0.0 stackoverflow.com添加到/ etc/hosts ...

Nou*_*him 15

Python是一种高级语言.你不能(不是直接)乱用内存地址所以答案是否定的.

然而,REPL可以方便地将最后一个表达式的结果存储在魔术变量中_.你可以从那里获取它.引用你的例子.

>>> open("/etc/passwd","r") #Oops I forgot to assign it
<open file '/etc/passwd', mode 'r' at 0x7f12c58fbdb0>
>>> f = _ # Not to worry. It's stored as _
>>> f
<open file '/etc/passwd', mode 'r' at 0x7f12c58fbdb0>
>>> 
Run Code Online (Sandbox Code Playgroud)