【发布时间】:2011-04-29 09:10:28
【问题描述】:
这是场景:
我愚蠢地忘记将返回的对象分配给一个变量:
>>> open("random_file.txt")
<open file 'random_file.txt', mode 'r' at 0x158f780>
有没有办法直接将内存地址分配给变量?大致相当于
int *ptr;
*ptr = 0x158f780;
反点:
在这种情况下,我可以丢弃对象 - 文件以读取模式打开,对象将被 GC 收集。但我对需要以确定性方式释放资源的场景的解决方案感兴趣。
我假设“at 0x158f780”部分只是对象的 id() - 它恰好是 CPython 中的内存地址(“这是特定于实现的,可能会改变,等等”) .所以我对这两种情况都感兴趣 - 将变量绑定到 id() 值会很好(更便携,什么不是),但将它绑定到裸内存地址也可以。
我在 google 上搜索了一些与“python 指针”相关、变量/内存地址分配和类似的东西,但似乎我的 google-fu 不够强大。
干杯,
编辑:
阅读答案并浏览 python 文档后的一些切线:文件对象由 REPL _ var 引用。一旦 _ 分配给下一个命令的结果,我假设它的引用计数变为 0。文件对象从内存中删除,如果我们假设它实现了一个理智的 __del__ 方法,它应该处理所有低级细节,即关闭文件等。 http://docs.python.org/reference/datamodel.html#object.__del__ 详细介绍了一般情况。
我将把 0.0.0.0 stackoverflow.com 添加到 /etc/hosts...
【问题讨论】:
-
虽然不是你直接要求的,但在python解释器中你可以从
_变量中得到前一行的返回值,所以ptr = _会给你你想要的——打开文件对象。 -
有非常几个问题不值得关心。即使是决定不关心他们也需要深思熟虑。简单地忽略事情通常是一件坏事。
-
@Noufal Ibrahim:“很少有不值得关心的问题”虽然是真的,但这显然是少数几个如此超越规则以至于成为典型事物的问题之一达到惊人的无关性。