Mat*_*ero 4 python cpython python-2.x python-2.7
我在跑:
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
Run Code Online (Sandbox Code Playgroud)
根据文件:
运营商
is和is not测试对象标识:x is y是True当且仅当x和y是相同的对象.
为了获得对象的身份,我们可以使用该id功能.
如果我们打开一个新的REPL,我们可以看到它300并-6具有相同的标识(在CPython上,这意味着它们都引用相同的内存地址):
>>> id(300)
94766593705400
>>> id(-6)
94766593705400
Run Code Online (Sandbox Code Playgroud)
请注意,实际值可能因执行而异,但它们始终相等.
然而,做300 is -6收益率False:
>>> 300 is -6
False
Run Code Online (Sandbox Code Playgroud)
我有一些问题:
300和-6分享相同的身份?300 is -6屈服False?int*_*ser 10
后id(300)执行,没有更多的引用300存在,所以ID被释放.执行时id(6),它会获得相同的内存块并存储6个.当你这样做-300 is 6,-300并且6都被同时引用时,它们将不再具有相同的地址.
如果您继续引用两者-300,则会6发生以下情况:
>>> a, b = -300, 6
>>> id(a)
some number
>>> id(b)
some different number; 6 is still in the other memory address.
Run Code Online (Sandbox Code Playgroud)
注意:在CPython中,从-5到256(我认为)的数字被缓存,并且将始终具有相同的地址,因此不会发生这种情况.