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(我认为)的数字被缓存,并且将始终具有相同的地址,因此不会发生这种情况.
归档时间: |
|
查看次数: |
102 次 |
最近记录: |