我在检查变量分配的id
时遇到了奇怪的行为。我已经运行了以下代码
a = -5
print(id(a))
并获得了ID如下
140710231913104
如果执行id
,多次执行Jupyter单元时,我会得到相同的a >= -5
;而如果我分配并运行a < -5
,则每次执行完{ Jupyter细胞。在下图中找到摘要
此行为可能是什么原因?
答案 0 :(得分:4)
看看下面的例子:
>>> a=256
>>> b=256
>>> print(id(a),id(b))
(31765012, 31765012)
>>>
>>> c=257
>>> d=257
>>> print(id(c),id(d))
(44492764, 44471284)
>>>
这将帮助您了解整数的意外行为。每当您在-5到256范围内创建一个Int时,实际上您实际上只是返回对现有对象的引用。这在python中称为Integer Caching。
答案 1 :(得分:-1)
来自failCallback
:
id(obj,/) 返回对象的标识。
这可以保证在同时存在的对象中是唯一的。 (CPython使用对象的内存地址。)
对于较小的数字(不确定确切的数字),python在内存中仅保留每个数字的一个“版本”。这就是为什么每次分配$("#file_download").click(function() {
$.fileDownload($(this).prop('type'), {
preparingMessageHtml: "The file download will begin shortly, please wait...",
failMessageHtml: "There was a problem generating your report, please try again.",
successCallback: function() { window.location.reload(true) }
});
return false; //this is critical to stop the click event which will trigger a normal file download!
});
时都会得到相同的存储位置的原因。分配help(id)
时,地址会更改。如果尝试更大的数字,则每次都会得到不同的结果。示例:
-5