我在跑步:
Python 2.7.8 (default, Oct 6 2017, 09:25:50)
GCC 4.1.2 20070626 (Red Hat 4.1.2-14) on Linux 2
The operators
is
andis not
test for object identity:x is y
isTrue
if and only ifx
andy
are the same object.
要获得对象的标识,我们可以使用^{
如果打开一个新的REPL,我们可以看到300
和-6
具有相同的标识(在CPython上,这意味着两者引用相同的内存地址):
>>> id(300)
94766593705400
>>> id(-6)
94766593705400
请注意,实际值可能因执行而异,但它们始终相等。你知道吗
但是,做300 is -6
会产生False
:
>>> 300 is -6
False
我有几个问题:
300
和-6
有相同的身份?你知道吗300 is -6
会产生False
?你知道吗
执行
id(300)
后,不再存在对300
的引用,因此释放id。当您执行id(6)
时,它将获得相同的内存块并存储6。当您执行-300 is 6
时,-300
和6
同时被引用,因此它们不再具有相同的地址。你知道吗如果同时保留对
-300
和6
的引用,则会发生以下情况:注意:在CPython中,从-5到256(我认为)的数字是缓存的,并且总是有相同的地址,所以这不会发生。你知道吗
这是^{} 函数的记录行为:
示例代码中整数对象的生存期只是函数调用(例如
id(300)
),因为不存在对它的其他引用。你知道吗相关问题 更多 >
编程相关推荐