为什么以下在Python中出现意外行为?
>>> a = 256
>>> b = 256
>>> a is b
True # This is an expected result
>>> a = 257
>>> b = 257
>>> a is b
False # What happened here? Why is this False?
>>> 257 is 257
True # Yet the literal numbers compare properly
Run Code Online (Sandbox Code Playgroud)
我使用的是Python 2.5.2.尝试一些不同版本的Python,似乎Python 2.3.3显示了99到100之间的上述行为.
基于以上所述,我可以假设Python在内部实现,使得"小"整数以不同于大整数的方式存储,is
运算符可以区分.为什么泄漏抽象?当我不知道它们是否是数字时,比较两个任意对象以查看它们是否相同的更好的方法是什么?
在下面的示例中,我有一些关于内存使用的相关问题.
如果我在翻译中跑,
foo = ['bar' for _ in xrange(10000000)]
Run Code Online (Sandbox Code Playgroud)
我机器上使用的真实内存最多80.9mb
.然后,我
del foo
Run Code Online (Sandbox Code Playgroud)
真正的记忆力下降,但仅限于30.4mb
.解释器使用4.4mb
基线,那么不26mb
向OS 释放内存的优势是什么?是因为Python"提前规划",认为你可能会再次使用那么多内存吗?
为什么它会50.5mb
特别释放- 基于此发布的金额是多少?
有没有办法强制Python释放所有使用的内存(如果你知道你不会再使用那么多内存)?
注意
这个问题不同于我如何在Python中明确释放内存?
因为这个问题主要处理从基线增加内存使用量,即使在解释器通过垃圾收集(使用gc.collect
或不使用)释放对象之后.