关于不可变字符串的更改id关于id类型对象str(在python 2.7中)令我困惑。这个str类型是不可变的,所以我希望一旦它被创建,它将始终具有相同的类型。id..我相信我不是很好的表达自己,所以我会张贴一个输入和输出序列的例子。>>> id('so')140614155123888>>> id('so')140614155123848>>> id('so')140614155123808所以在这段时间里,它一直在变化。但是,在变量指向该字符串后,情况会发生变化:>>> so = 'so'>>> id('so')140614155123728>>> so = 'so'>>> id(so)140614155123728>>> not_so = 'so'>>> id(not_so)140614155123728因此,一旦变量持有该值,它就会冻结id。实际上,之后del so和del not_so的输出id('so')再换一次。这是不与(小)整数相同的行为。我知道不变性和拥有同样的东西之间没有真正的联系。id尽管如此,我仍在努力找出这种行为的根源。我相信熟悉蟒蛇内部结构的人会比我更不惊讶,所以我试图达到同样的程度.更新用不同的字符串做同样的尝试会产生不同的结果.>>> id('hello')139978087896384>>> id('hello')139978087896384>>> id('hello')139978087896384现在它是平等.。
3 回答

四季花海
TA贡献1811条经验 获得超5个赞
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贡献1801条经验 获得超8个赞
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
添加回答
举报
0/150
提交
取消