关于不可变字符串的更改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个赞
isidis
>>> so = 'so'>>> new_so = '{0}'.format(so)>>> so is new_so
False>>> id(so)102596064>>> id(new_so)259679968>>> so == new_soTrue
添加回答
举报
0/150
提交
取消
