關(guān)于不可變字符串的更改id關(guān)于id類(lèi)型對(duì)象str(在python 2.7中)令我困惑。這個(gè)str類(lèi)型是不可變的,所以我希望一旦它被創(chuàng)建,它將始終具有相同的類(lèi)型。id..我相信我不是很好的表達(dá)自己,所以我會(huì)張貼一個(gè)輸入和輸出序列的例子。>>> id('so')140614155123888>>> id('so')140614155123848>>> id('so')140614155123808所以在這段時(shí)間里,它一直在變化。但是,在變量指向該字符串后,情況會(huì)發(fā)生變化:>>> so = 'so'>>> id('so')140614155123728>>> so = 'so'>>> id(so)140614155123728>>> not_so = 'so'>>> id(not_so)140614155123728因此,一旦變量持有該值,它就會(huì)凍結(jié)id。實(shí)際上,之后del so和del not_so的輸出id('so')再換一次。這是不與(小)整數(shù)相同的行為。我知道不變性和擁有同樣的東西之間沒(méi)有真正的聯(lián)系。id盡管如此,我仍在努力找出這種行為的根源。我相信熟悉蟒蛇內(nèi)部結(jié)構(gòu)的人會(huì)比我更不驚訝,所以我試圖達(dá)到同樣的程度.更新用不同的字符串做同樣的嘗試會(huì)產(chǎn)生不同的結(jié)果.>>> id('hello')139978087896384>>> id('hello')139978087896384>>> id('hello')139978087896384現(xiàn)在它是平等.。
3 回答

四季花海
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
print id('so')print id('so')print id('so')
2888960 2888960 2888960
2 0 LOAD_GLOBAL 0 (id) 3 LOAD_CONST 1 ('so') 6 CALL_FUNCTION 1 9 PRINT_ITEM 10 PRINT_NEWLINE 3 11 LOAD_GLOBAL 0 (id) 14 LOAD_CONST 1 ('so') 17 CALL_FUNCTION 1 20 PRINT_ITEM 21 PRINT_NEWLINE 4 22 LOAD_GLOBAL 0 (id) 25 LOAD_CONST 1 ('so') 28 CALL_FUNCTION 1 31 PRINT_ITEM 32 PRINT_NEWLINE 33 LOAD_CONST 0 (None) 36 RETURN_VALUE

蝴蝶刀刀
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
is
id
is
>>> so = 'so'>>> new_so = '{0}'.format(so)>>> so is new_so False
>>> id(so)102596064>>> id(new_so)259679968>>> so == new_soTrue
添加回答
舉報(bào)
0/150
提交
取消